MySQL - сервер:Почему этот сценарий создания БД не работает?

StackOverflow https://stackoverflow.com/questions/2331011

Вопрос

По какой-то причине этот MySQL завершается с ошибкой:

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;

Это выдает ошибку:

ОШИБКА 1005 (HY000):Не удается создать таблицу partb.dept_mgr (ошибка отсутствует:150)

Что может быть причиной этого?

Это было полезно?

Решение

Эта команда:

SHOW ENGINE INNODB STATUS;

является вашим другом, когда у вас возникают проблемы с созданием внешних ключей.Выходные данные (сокращенные)

------------------------
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

Если вы измените свое заявление на:

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;

это действительно работает.

Другие советы

Вы должны указать столбец (ы) во внешней таблице для ключа:

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

У вас есть только внешний ключ, ссылающийся на таблицу, а не на столбец.

Попробуй:рекомендательный сотрудник.ssn

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top