【发布时间】:2017-04-04 02:31:52
【问题描述】:
我需要一个脚本来检查数据库中是否存在列,如果不存在则创建缺失的列。 下面的代码会完全符合我的要求吗?
如果不存在(从 INFORMATION_SCHEMA.COLUMNS 中选择 * WHERE TABLE_NAME = ‘management’ AND COLUMN_NAME = ‘lastname’) 开始 ALTER TABLE TEST 添加姓氏 VARCHAR 结尾【问题讨论】:
我需要一个脚本来检查数据库中是否存在列,如果不存在则创建缺失的列。 下面的代码会完全符合我的要求吗?
如果不存在(从 INFORMATION_SCHEMA.COLUMNS 中选择 * WHERE TABLE_NAME = ‘management’ AND COLUMN_NAME = ‘lastname’) 开始 ALTER TABLE TEST 添加姓氏 VARCHAR 结尾【问题讨论】:
请注意,5.0 之前的 MySQL 不支持 INFORMATION_SCHEMA。 5.0之前也不支持存储过程,所以如果你需要支持MySQL 4.1,这个方案就不好了。
IF NOT EXISTS( SELECT NULL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'management'
AND table_schema = 'db_name'
AND column_name = 'lastname') THEN
ALTER TABLE `management ` ADD `lastname ` VARCHAR(255) NOT NULL;
END IF;
另一种解决方案是尝试
ALTER TABLE ADD lastname VARCHAR(255) NOT NULL;
。如果该列已经存在,它应该会抛出一个错误。
错误 1060 (42S21):列名“姓氏”重复 在升级脚本中捕获错误并忽略它。
【讨论】: