未创建MySQL外键

时间:2016-03-28 22:01:52

标签: mysql

我以为我在我的表上设置了外键,但是尽管我的DDL中有正确的语法,甚至在事后尝试添加约束时,也没有任何反应。我没有收到任何错误,我收到一条消息说“10行受影响记录:10个重复:0警告:0'

这是我的表的定义:

CREATE TABLE USERS_COURSES (
  USERS_COURSES_ID INT NOT NULL AUTO_INCREMENT,
  USER_ID          INT NOT NULL,
  COURSE_ID        INT NOT NULL,
  ROLE             INT NOT NULL,
  CONSTRAINT PK_USERS_COURSES PRIMARY KEY (USERS_COURSES_ID),
  CONSTRAINT U_USERS_COURSES UNIQUE (USER_ID, COURSE_ID),
  CONSTRAINT FK_USERS_COURSES_USERS FOREIGN KEY (USER_ID) REFERENCES USERS (USER_ID),
  CONSTRAINT FK_USERS_COURSES_COURSES FOREIGN KEY (COURSE_ID) REFERENCES COURSES (COURSE_ID)
);

当我查看MySQL Workbench中的表格并通过IntelliJ IDEA时,我看到的只是一个名为FK_USERS_COURSES_COURSES (COURSE_ID)的索引

我可以根据自己的喜好多次运行以下命令,并且没有任何反应:

ALTER TABLE USERS_COURSES ADD CONSTRAINT FK_USERS_COURSES_USERS FOREIGN KEY (USER_ID) REFERENCES USERS (USER_ID);
ALTER TABLE USERS_COURSES ADD CONSTRAINT FK_USERS_COURSES_COURSES FOREIGN KEY (COURSE_ID) REFERENCES COURSES (COURSE_ID);

以下是我在IntelliJ的数据库选项卡中看到的内容:

enter image description here

可能导致这种情况的原因是什么?我需要外键来防止删除,现在这种情况不会发生。

1 个答案:

答案 0 :(得分:1)

查看MySQL的InnoDB documentation。 虽然MySQL接受外键声明作为有效语法,但目前只有InnoDB引擎实际实现了它们。如果它不是您设置的默认设置,请将其包含在表格选项中 - CREATE TABLE ... ENGINE = InnoDB