Mysql InnoDB外键和提交

Mysql InnoDB外键和提交,mysql,innodb,Mysql,Innodb,我正在将现有数据库从MyISAM转换为InnoDB并实现各种外键,但在数据库上运行转换脚本时遇到问题:- 我正在运行以下所有查询 DELETE FROM example WHERE user NOT IN (select id FROM users); ALTER TABLE `example` CHANGE `user` `user` INT( 11 ) UNSIGNED NOT NULL ; ALTER TABLE example ADD FOREIGN KEY (user) REFEREN

我正在将现有数据库从MyISAM转换为InnoDB并实现各种外键,但在数据库上运行转换脚本时遇到问题:-

我正在运行以下所有查询

DELETE FROM example WHERE user NOT IN (select id FROM users);
ALTER TABLE `example` CHANGE `user` `user` INT( 11 ) UNSIGNED NOT NULL ;
ALTER TABLE example ADD FOREIGN KEY (user) REFERENCES users(ID);
ALTER TABLE example ADD FOREIGN KEY (car) REFERENCES cars(ID);
当我运行所有查询时,由于外键约束,由于DELETE语句没有运行(如果我单独运行它们,这很好),它失败了。这是innodb数据库上的commit问题,还是由于在下一次查询之前删除的速度没有完成

有两个外国身份证也可以吗?(两个不同的表users.id和cars.id)


谢谢

不知道错误消息可能会说什么,也不知道您试图实现什么,但是
altertable
是一个DDL语句,不能在MySQL中回滚。手册一章说明:

本节中列出的语句(及其任何同义词) 隐式结束当前会话中活动的任何事务,就像您在执行语句之前完成了提交一样。从MySQL开始 5.5.3,大多数语句在执行后也会导致隐式提交

[……]

定义或修改数据库对象的数据定义语言(DDL)语句

[……]

ALTER TABLE
CREATE TABLE
DROP TABLE
不提交事务 如果使用了
临时
关键字。(这不适用于其他情况。) 对临时表(如
创建索引
)的操作会导致 但是,虽然没有隐式提交,但是 语句将被回滚。因此,使用此类声明将 违反事务原子性:例如,如果使用
CREATE
临时表
,然后回滚事务,该表将保留 存在


users
表的
id
列中有
NULL
值吗?感谢您的回复。错误(很抱歉,这会有帮助!)很简单,因为删除没有运行,所以无法设置foreignkey,从上面看,我是否只需要发出一个COMMIT;在声明之前?我试着把它放进去;在单个之后,但它似乎仍然“跳过”了删除。我没有使用临时语法,所以我不确定为什么删除没有运行(除非我自己执行)