Nick Heiner
Nick Heiner

Reputation: 122600

MySQL: Why doesn't this db creation script work?

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

Answers (3)

Michael Pilat
Michael Pilat

Reputation: 6520

You have to specify the column(s) in the foreign table for the key:

FOREIGN KEY (ssn) REFERENCES Employees (ssn) ...

Upvotes: 2

Roland Bouman
Roland Bouman

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

Cryophallion
Cryophallion

Reputation: 704

You only have the foreign key referencing the table, not the column.

Try: references Employee.ssn

Upvotes: 0

Related Questions