5

我首先创建了教师表,它的描述是

   mysql> desc teacher;
   +--------------+-------------+------+-----+---------+-------+
   | Field        | Type        | Null | Key | Default | Extra |
   +--------------+-------------+------+-----+---------+-------+
   | TEACHER_ID   | varchar(3)  | NO   | PRI | NULL    |       |
   | TEACHER_NAME | varchar(40) | YES  |     | NULL    |       |
   +--------------+-------------+------+-----+---------+-------+

在我创建了一个如下的新表之后。我的需要是在下表中我想TEACHER_ID用作外键。我写了以下内容。我不知道它是否在语法上是错误的。但我没有得到任何错误...

 mysql> CREATE TABLE SUB_MCA_TY
->  (SUB_ID VARCHAR(4) PRIMARY KEY,
->  SUB_NAME VARCHAR(30),
-> TEACHER_ID VARCHAR(3) REFERENCES TEACHER(TEACHER_ID));
4

1 回答 1

13

“内联”外键总是被 MySQL 默默地忽略,即使是 InnoDB(欢迎来到 MySQL 美妙的一致性世界......)

您需要在列之后将其更改为显式约束:

CREATE TABLE SUB_MCA_TY
(
   SUB_ID VARCHAR(4) PRIMARY KEY,
   SUB_NAME VARCHAR(30),
   TEACHER_ID VARCHAR(3),
   foreign key (TEACHER_ID) REFERENCES TEACHER(TEACHER_ID)
);

从手册中引用

MySQL 不识别或不支持“inline REFERENCES 规范”(定义在 SQL 标准中),其中引用被定义为列规范的一部分

于 2013-03-06T14:28:34.640 回答