【问题标题】:adding 2nd foreign keys in one table - MySql在一个表中添加第二个外键 - MySql
【发布时间】:2015-11-17 18:11:12
【问题描述】:

我想在我现有的表“tbl_subcaste”上添加第二个外键,它已经有一个“fk caste caste_id”,如下所示:

现在我想在此表上添加另一个 'fk religionreligious_id',如下所示:

但是MySql在这样做之后给了我这个错误:

ALTER TABLE `tbl_subcaste` 
ADD  CONSTRAINT `fk religion religion_id` 
FOREIGN KEY (`religion_id`) REFERE `sanskrut`.`tbl_religion`(`religion_id`)
ON DELETE NO ACTION ON UPDATE CASCADE;

错误:#1022 - 无法写入;表“#sql-534_f7”中的重复键

我不明白,为什么这不让我添加另一个kf?

【问题讨论】:

  • 检查两个表中的CHARACTER SETCOLLATION。他们可能应该是utf8utf8_general_ci。 (但其他对是可能的。)

标签: mysql database indexing foreign-keys foreign-key-relationship


【解决方案1】:

外键名好像已经存在了,改一下试试吧-

ALTER TABLE `tbl_subcaste` 
ADD  CONSTRAINT `fk religion religion_id100` 
FOREIGN KEY (`religion_id`) REFERE `sanskrut`.`tbl_religion`(`religion_id`)
ON DELETE NO ACTION ON UPDATE CASCADE;

即使您应该遵循一个标准来避免这个问题,因为您可以将名称保留为“fk_tablename_columnname”。

您还可以使用以下查询来获取所有键名和其他有用信息。

SELECT constraint_Schema AS mydb, table_name AS child_table,constraint_name AS foreign_key_name, referenced_table_name AS master_table 
FROM information_Schema.REFERENTIAL_CONSTRAINTS 
WHERE constraint_Schema='mydb' AND table_name='mytable';

【讨论】:

  • 感谢它似乎有效,但我如何检查我表中的所有 fk 有,你知道吗?
  • 正如你建议的那样 fk_tablename_columnname 但我的表名也有下划线 (_) 所以如果我输入 'fk_tbl_religion_religion_id' ,那么我认为它看起来很混乱?你有什么意见?
  • 名称无关紧要,因此您可以通过遵循一些标准来保留任何东西,您可以避免重复问题,您可以保持原样或可以避免表名和列名之间的 _...原因标准是你只能在任何表的任何列上创建一个外键,所以如果你遵循它 fk_tblname_colname 那么它总是唯一的......
  • 只是为了更正措辞,即只有单个外键通常应该是任何字段上的单个外键,在极少数情况下可以多个,然后我们可以在外键名称中添加后缀......
【解决方案2】:

我认为您错过了语法“REFERENCES”。试试下面的查询

ALTER TABLE tbl_subcaste  
ADD CONSTRAINT `f.k` FOREIGN KEY (`religion_id`) REFERENCES sanskrut.tbl_religion(`religion_id`) ON UPDATE CASCADE ON DELETE NO ACTION;

【讨论】:

  • 问题是,外键名已经存在。看看上面的答案。
  • 我建议你通过SQLyog,因为当你使用现有的外键名称时它会弹出一个错误。与您使用的相比,它更加用户友好。
猜你喜欢
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2018-11-18
相关资源
最近更新 更多