MySQL如何新增列并将默认值设为表内现有字段的值?
在MySQL中新增列并同步现有字段值的实现方法
当然可以实现你的需求,但MySQL没法直接在ALTER TABLE新增列时,把同表现有字段的值设为新列的默认值——因为DEFAULT关键字只支持常量或者不依赖表内其他字段的系统函数(比如CURRENT_TIMESTAMP这类)。咱们得拆成两步来操作,要是还想让后续新增/更新的数据自动同步,还得用到触发器。
第一步:新增目标列
先给表加上新列,暂时不用设置默认值(或者设为NULL也可以):
ALTER TABLE sampleTable ADD column_text_duplicate longtext;
第二步:同步现有数据
把column_text里已有的值批量复制到新列中:
UPDATE sampleTable SET column_text_duplicate = column_text;
注意:如果表的数据库量很大,这个
UPDATE语句会锁表一段时间,建议在业务低峰期执行。
可选:让后续数据自动同步
如果希望之后新增行时,column_text_duplicate自动继承column_text的值,可以创建一个BEFORE INSERT触发器:
DELIMITER // CREATE TRIGGER trg_sampleTable_copy_insert BEFORE INSERT ON sampleTable FOR EACH ROW BEGIN SET NEW.column_text_duplicate = NEW.column_text; END // DELIMITER ;
要是还需要在**更新column_text**时,同步更新column_text_duplicate,再补充一个BEFORE UPDATE触发器:
DELIMITER // CREATE TRIGGER trg_sampleTable_copy_update BEFORE UPDATE ON sampleTable FOR EACH ROW BEGIN SET NEW.column_text_duplicate = NEW.column_text; END // DELIMITER ;
这样不管是新增还是更新数据,新列都会和column_text保持一致啦。
内容的提问来源于stack exchange,提问作者unamen
相关产品推荐
相关产品推荐

