外键违规 - 不知道为什么

Ben*_*enV 5 mysql foreign-key

我有以下两个带有外键的表status_id

mysql> describe usr_cookbook;
+-----------+-----------+------+-----+-------------------+-------+
| Field     | Type      | Null | Key | Default           | Extra |
+-----------+-----------+------+-----+-------------------+-------+
| user_id   | int(11)   | NO   | PRI | NULL              |       |
| recipe_id | int(11)   | NO   | PRI | NULL              |       |
| status_id | int(11)   | NO   | MUL | NULL              |       |
| added_ts  | timestamp | NO   |     | CURRENT_TIMESTAMP |       |
+-----------+-----------+------+-----+-------------------+-------+

mysql> describe usr_cookbook_status;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| status_id | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(45) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

中有两行usr_cookbook_status

mysql> select * from usr_cookbook_status;
+-----------+-----------+
| status_id | name      |
+-----------+-----------+
|         1 | Try Soon  |
|         2 | Favorites |
+-----------+-----------+
Run Code Online (Sandbox Code Playgroud)

所以我应该很好地插入 usr_cookbook 对吧?

mysql> insert into usr_cookbook (user_id, recipe_id, status_id) values (3, 5, 1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint 
fails (`tomato`.`usr_cookbook`, CONSTRAINT `fk_cookbook_status` FOREIGN KEY 
(`status_id`)
REFERENCES `usr_cookbook_status` (`status_id`) ON DELETE NO ACTION ON UPDATE
NO ACTION)
Run Code Online (Sandbox Code Playgroud)

为什么会违反约束?在status_id父表我使用(1)存在。我确定我在这里遗漏了一些简单的东西......

Ben*_*enV 3

当我按照 Brian 的建议查看 DDL 时,问题立即变得清晰起来:该usr_cookbook_status表正在使用 MyISAM 引擎。我把它切换到 InnoDB,现在一切正常了。