Error Code: 1215. Cannot add foreign key constraint (foreign keys)
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));
I am trying to insure data consistency between the tables by using foreign key so that the DBMS can check for errors; however, it seems we can't do that for some reason. What's the error and is there an alternative? Also, when I fill a table that has a foreign key, I can't fill the field that's reserved for the foreign key(s), right? Also, is a foreign key considered to be a key at all?
The most likely issue is this line:
FOREIGN KEY (classLeader) REFERENCES student(studentID),
The datatype of classLeader is VARCHAR(255). That has to match the datatype of the referenced column... student.studentID
. And of course, the student
table has to exist, and the studentID
column has to exist, and the studentID
column should be the PRIMARY KEY of the student table (although I believe MySQL allows this to be a UNIQUE KEY, rather than a PRIMARY KEY, or even just have an index on it.)
In any case, what's missing here is the output from SHOW CREATE TABLE student;
There's a datatype mismatch.
The classLeader VARCHAR(255)
column cannot be a foreign key reference to studentID INT
.
The datatypes of the two columns has to match.
You are getting this error because of in FOREIGN KEY (classLeader) REFERENCES student(studentID)
datatype of studentID
and classLeader
is different.Datatype of primary key column and foreign key column must be same.
From MySQL Site:
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.
The error gets resolved:
To create a Foreign key for a table like this
CREATE TABLE USERS_SO (
USERNAME VARCHAR(10) NOT NULL,
PASSWORD VARCHAR(32) NOT NULL,
ENABLED SMALLINT,
PRIMARY KEY (USERNAME)
);
The below code works fine
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/86272.html