【发布时间】:2011-03-24 16:09:38
【问题描述】:
我正在尝试编写一个查询来检查 MySQL 中的特定表是否具有特定列,如果没有,则创建它。否则什么都不做。在任何企业级数据库中,这确实是一个简单的过程,但 MySQL 似乎是个例外。
我想像
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='prefix_topic' AND column_name='topic_last_update')
BEGIN
ALTER TABLE `prefix_topic` ADD `topic_last_update` DATETIME NOT NULL;
UPDATE `prefix_topic` SET `topic_last_update` = `topic_date_add`;
END;
会工作,但它失败了。有什么办法吗?
【问题讨论】:
-
为什么不直接创建呢?如果存在,创建将失败,但你不在乎。
-
创建发生在事务内部,失败将终止整个事务,可悲但真实
-
@haim — 谢谢提醒,但链接中建议的查询仅在过程中有效:(
-
DDL 语句导致当前事务中的隐式提交。 dev.mysql.com/doc/refman/5.0/en/implicit-commit.html
标签: mysql