错误代码:1215.无法添加外键约束(外键)
CREATE DATABASE my_db;
CREATE TABLE class (classID int NOT NULL AUTO_INCREMENT,
nameClass varchar(255),
classLeader varchar(255),
FOREIGN KEY (classLeader) REFERENCES student(studentID),
PRIMARY KEY (classID));
CREATE TABLE student (studentID int NOT NULL AUTO_INCREMENT,
lastName varchar(255),
firstName varchar(255),
classID int,
FOREIGN KEY (classID) REFERENCES class(classID),
PRIMARY KEY (studentID));
我试图通过使用外键确保表之间的数据一致性,以便DBMS可以检查错误; 但是,看起来我们不能这样做,出于某种原因。 什么是错误,是否有其他选择? 另外,当我填充一个具有外键的表格时,我无法填充为外键保留的字段,对吧? 另外,外键是否被认为是关键?
最可能的问题是这一行:
FOREIGN KEY (classLeader) REFERENCES student(studentID),
classLeader的数据类型是VARCHAR(255)。 这必须与被引用的列... student.studentID
的数据类型匹配 。 当然, student
表必须存在,并且studentID
列必须存在,并且studentID
列应该是学生表的主键(尽管我相信MySQL允许它成为唯一键,而不是主键,甚至只是有一个索引。)
无论如何,这里缺少的是SHOW CREATE TABLE student;
的输出SHOW CREATE TABLE student;
有一个数据类型不匹配。
classLeader VARCHAR(255)
列不能是对studentID INT
的外键引用。
两列的数据类型必须匹配。
由于在FOREIGN KEY (classLeader) REFERENCES student(studentID)
studentID
和classLeader
数据类型不同,主键列和外键列的类型必须相同。
从MySQL网站:
Corresponding columns in the foreign key and the referenced key must have similar data types.
The size and sign of integer types must be the same.
The length of string types need not be the same.
For nonbinary (character) string columns, the character set and collation must be the same.
该错误得到解决:
为这样的表创建一个外键
CREATE TABLE USERS_SO (
USERNAME VARCHAR(10) NOT NULL,
PASSWORD VARCHAR(32) NOT NULL,
ENABLED SMALLINT,
PRIMARY KEY (USERNAME)
);
下面的代码工作正常
CREATE TABLE AUTHORITIES_SO (
USERNAME VARCHAR(10) NOT NULL,
AUTHORITY VARCHAR(10) NOT NULL,
FOREIGN KEY (USERNAME) REFERENCES USERS_SO(USERNAME)
);
链接地址: http://www.djcxy.com/p/86271.html
上一篇: Error Code: 1215. Cannot add foreign key constraint (foreign keys)