我有一个带有INT(7)类型列的表,我想让它成为另一个表的主键上的外键约束。但是,主键是INT(11)UNSIGNED类型,所以我需要更改INT(7)以匹配它,以便创建外键。
虽然我不希望将INT(7)转换为INT(11)UNSIGNED(我已检查要更改的列并且没有无符号值)有任何问题,有没有办法问MySQL哪个它会改变行的值吗?无论如何我会备份,但我希望能够事先找出是否有任何问题,因为我可以在运行ALTER TABLE语句之前修复它们。
答案 0 :(得分:2)
运行
CREATE TABLE tmp SELECT yourcolumnname AS x, yourcolumnname AS y FROM yourtable;
ALTER TABLE tmp MODIFY COLUMN x INT(11) UNSIGNED;
SELECT * FROM tmp WHERE x!=y;
DROP TABLE tmp;
答案 1 :(得分:0)
是的,如果使用TEMPORARY关键字,则ALTER TABLE
不会提交。
ALTER TEMPORARY TABLE .... [your code]
编辑:我刚注意到这一点:
"但是,虽然没有发生隐式提交,但也不能 声明回滚。因此,使用这样的陈述会 违反事务原子性:例如,如果使用CREATE TEMPORARY TABLE然后回滚事务,表保持不变 存在。"
所以我不确定ALTER
。