dzqdzq

修改一个表的字段

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代码,即修改了字段。并且外键保持不变

分类:

技术点:

相关文章: