我有两张桌子,让我们来电话table1
和table2
。
table1
的主键是CHAR(36),非空,且唯一。table2
中我想尝试制作FK的列也是CHAR(36),非空和唯一。table1
有四个外键,都指向其他表。 (他们都没有指向table2
。)当我尝试在table1
Workbench中将table2
的PK定义为FK时,我不会选择该字段。无论我做了什么,都不会选中table2
中列的复选框。
答案 0 :(得分:0)
为了创建这个外键,我不得不绕过Workbench的GUI直接运行它。
ALTER TABLE `my_schema`.`table_two`
ADD INDEX `fk_to_table_one_pk_idx` (`table_two_column` ASC);
ALTER TABLE `my_schema`.`table_two`
ADD CONSTRAINT `fk_to_table_one_pk`
FOREIGN KEY (`table_two_column`)
REFERENCES `my_schema`.`table_one` (`table_one_column`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
我运行了这个查询,ta-friggin-da,FK就位,没有抛出任何错误。我听说Workbench非常不稳定,我认为这证实了这一点。
在我使用FK之后,我通过GUI将table2
中的列标记为PK而没有问题。 SQL可能在标记为PK的table2
列中运行得很好,但我没有这样运行,所以我无法确认。
答案 1 :(得分:0)
尝试DISABLE KEYS或
SET FOREIGN_KEY_CHECKS=0;
确保
SET FOREIGN_KEY_CHECKS=1;
后。