【问题标题】:Why is my MySQL server not recognizing foreign key relations?为什么我的 MySQL 服务器无法识别外键关系?
【发布时间】:2011-08-21 10:47:39
【问题描述】:

好吧,我在 Stack Overflow 上的问题已经得到了 100 多个答案,但现在是我终于注册并发布我的第一个问题的时候了!

好的,我为我的程序的用户准备了一个表格,并以 1:1 和 1:M 的关系附加了 11 个表格。大多数外键设置为ON UPDATE CASCADE ON DELETE RESTRICT。如果我删除中心表,它允许我这样做,尽管应该有外键。当我之前处理过关系数据库时,我会收到以下错误消息:

#1217 - Cannot delete or update a parent row: a foreign key constraint fails
#1452 - Cannot add or update a child row: a foreign key constraint fails

现在请注意,这是我真正想要错误消息的时间。我想要关系数据库的功能,我所有的表都是 InnoDB。谷歌没有帮助我,我在 MySQL 文档中找不到任何内容。

【问题讨论】:

  • 您是从中心表中删除表还是删除一行?
  • 你可能想检查是否真的有外键约束
  • 检查foreign_key_checks变量的设置:dev.mysql.com/doc/refman/5.1/en/…
  • @ypercube 它让我两者兼得。我还可以使用不在父表中的外键值在子表中插入行。 SHOW VARIABLES 给我foreign_key_checks ON
  • @pif 我从CREATE TABLE 中提取了CONSTRAINT... FOREIGN KEY... ON...,并将其设为ALTER TABLE。还是不行。

标签: mysql foreign-keys relational-database innodb


【解决方案1】:

MySQL 论坛上的This post 接近但没有详细说明需要做什么来解决这个问题。基本上:

service mysqld stop
cd /var/lib/mysql
mkdir old
mv ib* old
vim /etc/my.cnf
servie mysqld start

对于 vim,确保 innodb_buffer_pool_size、innodb_log_file_size 和 innodb_log_buffer_size 设置正确。 MySQL论坛的Another post有一点配置错误,即innodb_log_file_size需要是innodb_buffer_pool_size的25%,所以我这三个分别是16M、4M和8M。

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多