修改一個表的字段
ALTER TABLE `member` CHANGE `memberid` `memberid` bigint unsigned;
修改含有外鍵的字段
-- 執行 begin 到 end 之間的代碼可能需要修改sql_mode值 show variables like '%sql_mode' -- 保存查詢出來的sql_mode 值 set global sql_mode='' set session sql_mode='' -- begin set group_concat_max_len = 2048; set @table_name ="member"; set @change ="bigint unsigned"; set @table_id = "memberid"; select distinct table_name, column_name, constraint_name, referenced_table_name, referenced_column_name, CONCAT( GROUP_CONCAT('ALTER TABLE ',table_name,' DROP FOREIGN KEY ',constraint_name SEPARATOR ';'), ';\n', GROUP_CONCAT('ALTER TABLE `',table_name,'` CHANGE `',column_name,'` `',column_name,'` ',@change SEPARATOR ';'), ';\n', CONCAT('ALTER TABLE `',@table_name,'` CHANGE `',@table_id,'` `',@table_id,'` ',@change), ';\n', GROUP_CONCAT('ALTER TABLE `',table_name,'` ADD CONSTRAINT `',constraint_name,'` FOREIGN KEY(',column_name,') REFERENCES ',referenced_table_name,'(',referenced_column_name,')' SEPARATOR ';') ) as query from information_schema.key_column_usage where referenced_table_name is not null and referenced_column_name is not null and referenced_table_name = @table_name group by referenced_table_name -- end -- 恢復 set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
執行begin到end之間的代碼會得到 query 代碼:
ALTER TABLE member_weixin DROP FOREIGN KEY member_weixin_ibfk_1;ALTER TABLE member_qq DROP FOREIGN KEY member_qq_ibfk_1;ALTER TABLE member_visitor DROP FOREIGN KEY member_visitor_ibfk_1; ALTER TABLE `member_weixin` CHANGE `memberid` `memberid` bigint unsigned;ALTER TABLE `member_qq` CHANGE `memberid` `memberid` bigint unsigned;ALTER TABLE `member_visitor` CHANGE `memberid` `memberid` bigint unsigned; ALTER TABLE `member` CHANGE `memberid` `memberid` bigint unsigned; ALTER TABLE `member_weixin` ADD CONSTRAINT `member_weixin_ibfk_1` FOREIGN KEY(memberid) REFERENCES member(memberid);ALTER TABLE `member_qq` ADD CONSTRAINT `member_qq_ibfk_1` FOREIGN KEY(memberid) REFERENCES member(memberid);ALTER TABLE `member_visitor` ADD CONSTRAINT `member_visitor_ibfk_1` FOREIGN KEY(memberid) REFERENCES member(memberid)
執行query代碼,即修改了字段。並且外鍵保持不變