我正在运行MySQL 5.5.43-0+deb8u1,并尝试创建以下表:
CREATE TABLE IF NOT EXISTS `car_favorites` (
`id` INTEGER UNSIGNED auto_increment ,
`user_id` INTEGER UNSIGNED NOT NULL,
`car_id` INTEGER UNSIGNED NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
`deleted_at` DATETIME,
UNIQUE `user_id_car_id` (`user_id`, `car_id`),
PRIMARY KEY (`id`),
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`car_id`) REFERENCES `cars` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;引用的表users和cars已存在。当我尝试运行这个查询时,我得到了以下错误:
ERROR 2013 (HY000): Lost connection to MySQL server during query之后,在执行SHOW TABLES之类的操作时会列出该表,但如果我尝试对该表(即DESCRIBE car_favorites)执行查询,服务将报告该表不存在,并且重新启动该服务会使该表消失。
但是,当我删除查询的这一部分时:
FOREIGN KEY (`car_id`) REFERENCES `cars` (`id`) ON DELETE SET NULL ON UPDATE CASCADE创建该表时没有任何问题。奇怪的是,如果我运行这个查询:
SHOW ENGINE INNODB STATUS;在运行失败的create查询之后,没有显示或列出任何外键错误。打开MySQL日志并检查错误日志显示了这个相当模糊的错误:
13:21:41 UTC - mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.然后是堆栈跟踪和一些其他信息,但没有具体信息。
我不知道为什么这个外键子句会导致这种崩溃。任何在正确方向上的见解或观点都将受到极大的赞赏。
发布于 2015-06-22 21:43:45
通过写这个问题的过程,我找到了答案。如果您真的深吸一口气并阅读create query,这是相当明显的。
因为我用NOT NULL声明了列car_id,所以外键声明的ON DELETE SET NULL部分就没有任何意义了。将该子句更改为ON DELETE CASCADE解决了问题。
为什么MySQL卡住了,不能给我一个更具体的错误,我不知道。
https://stackoverflow.com/questions/30981526
复制相似问题