我在MySQL 5.1.41上执行同一事务中的多个ALTER TABLE
语句时出现问题。有运行相同的代码,并有上49年5月1日在单个事务中发出多个ALTER TABLE语句
多没有这些问题在同一个表做工精细ADD FOREIGN KEY
语句的另一个开发商:
ALTER TABLE school_state ADD FOREIGN KEY (school_id) REFERENCES school(id) ON DELETE CASCADE;
ALTER TABLE school_state ADD FOREIGN KEY (state_id) REFERENCES state(id) ON DELETE CASCADE;
但在不同的表,我得到一个神秘的错误:
ALTER TABLE school_state ADD FOREIGN KEY (school_id) REFERENCES school(id) ON DELETE CASCADE;
ALTER TABLE school_state ADD FOREIGN KEY (state_id) REFERENCES state(id) ON DELETE CASCADE;
ALTER TABLE publisher_login ADD FOREIGN KEY (publisher_id) REFERENCES publisher(id);
Can't create table 'my_database.#sql-2cd_45' (errno: 150)
更奇怪的是,多个DROP FOREIGN KEY
语句失败乃至全国同一张表:
ALTER TABLE school_state DROP FOREIGN KEY school_state_ibfk_2;
ALTER TABLE school_state DROP FOREIGN KEY school_state_ibfk_1;
Error on rename of './my_database/school_state' to './my_database/#sql2-2cd-45' (errno: 152)
我真的要去执行每一个单个语句作为它自己的事务吗?因为这种做法违背了原子交易的目的。
更新:下面每艾克的建议下,我的ADD FOREIGN KEY
上面的查询后运行SHOW ENGINE INNODB STATUS
,并得到如下:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
110630 8:01:12 Error in foreign key constraint of table my_database/#sql-2cd_95:
FOREIGN KEY (publisher_id) REFERENCES publisher(id):
Cannot resolve column name close to:
) REFERENCES publisher(id)
老实说,我还是不明白的问题是,作为键引用(publisher.id
)确实存在,并且打算成为外键的字段(publisher_login.publisher_id
)也非常存在。这些语句一次只能运行一次,所以为什么一次运行时会导致错误?