Reputation: 122600
For some reason, this MySQL fails:
CREATE SCHEMA IF NOT EXISTS `partB` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `partB`;
CREATE TABLE Employees ( ssn CHAR(11),
Name CHAR(30),
mlot INTEGER,
PRIMARY KEY(ssn))
ENGINE = InnoDB;
CREATE TABLE Dept_Mgr ( did INTEGER,
dname CHAR(20),
ssn CHAR(11) NOT NULL,
PRIMARY KEY (did),
FOREIGN KEY (ssn) REFERENCES Employees
ON DELETE NO ACTION)
ENGINE = InnoDB;
It gives the error:
ERROR 1005 (HY000): Can't create table
partb.dept_mgr
(errno: 150)
What can be causing this?
Upvotes: 1
Views: 126
Reputation: 6520
You have to specify the column(s) in the foreign table for the key:
FOREIGN KEY (ssn) REFERENCES Employees (ssn) ...
Upvotes: 2
Reputation: 31991
This command:
SHOW ENGINE INNODB STATUS;
is your friend when you have trouble creating foreign keys. Output (abridged)
------------------------
LATEST FOREIGN KEY ERROR
------------------------
100225 2:51:42 Error in foreign key constraint of table test/dept_mgr:
FOREIGN KEY (ssn) REFERENCES Employees
ON DELETE NO ACTION)
ENGINE = InnoDB:
Syntax error close to:
ON DELETE NO ACTION)
ENGINE = InnoDB
If you change your statement to:
CREATE TABLE Dept_Mgr (
did INTEGER,
dname CHAR(20),
ssn CHAR(11) NOT NULL,
PRIMARY KEY (did),
FOREIGN KEY (ssn) REFERENCES Employees(ssn)
) engine = innodb;
it does work.
Upvotes: 1
Reputation: 704
You only have the foreign key referencing the table, not the column.
Try: references Employee.ssn
Upvotes: 0