mysql innoDB ошибка 1005 - PullRequest
       2

mysql innoDB ошибка 1005

2 голосов
/ 29 августа 2011

Я пытаюсь найти причину ошибки 1005 при создании моих таблиц:

CREATE TABLE hospitals(
    hosp_id        INT       NOT NULL AUTO_INCREMENT,
    hosp_name      VARCHAR(100) NOT NULL,
    hosp_address   VARCHAR(100) NOT NULL, 
    hosp_ph_number VARCHAR(8)   NOT NULL,
    PRIMARY KEY(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8;

CREATE TABLE transport(
    tr_regnumber   VARCHAR(8)  NOT NULL,
    tr_brand       VARCHAR(15) NOT NULL,
    tr_description VARCHAR(25), 
    hosp_id        INT, 
    PRIMARY KEY (tr_regnumber), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8; 

CREATE TABLE buildings(
    build_id          INT NOT NULL AUTO_INCREMENT,
    hosp_id           INT,
    build_address     VARCHAR(100) NOT NULL,
    build_description VARCHAR(25),
    PRIMARY KEY (build_id), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8; 

CREATE TABLE patients(
    pat_id         INT NOT NULL AUTO_INCREMENT,
    pat_fullname   VARCHAR(150) NOT NULL,
    diagnosis      VARCHAR(150) NOT NULL,
    emp_id         INT, 
    pat_ph_number  VARCHAR(8),
    pat_address    VARCHAR(100),
    hosp_id        INT,
    pl_num         INT,
    PRIMARY KEY (pat_id),
    FOREIGN KEY (pl_num) REFERENCES places(pl_number),
    FOREIGN KEY (emp_id) REFERENCES employees(emp_id),
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8;

CREATE TABLE places(
    pl_number    INT NOT NULL AUTO_INCREMENT,
    pat_id       INT NOT NULL,
    hosp_id      INT NOT NULL,
    PRIMARY KEY (pl_number),
    FOREIGN KEY (pat_id) REFERENCES patients(pat_id),
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8;

CREATE TABLE employees(
    emp_id            INT NOT NULL AUTO_INCREMENT,
    emp_fullname      VARCHAR(150) NOT NULL,
    emp_position      VARCHAR(100) NOT NULL,
    emp_ph_number     VARCHAR(8),
    emp_home_address  VARCHAR(100), 
    hosp_id           INT NOT NULL,
    PRIMARY KEY (emp_id),
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8;

Вот ошибки:

ERROR 1005 (HY000): Can't create table 'hospital_db.patients' (errno: 150)
ERROR 1005 (HY000): Can't create table 'hospital_db.places' (errno: 150)

Вот вывод SHOW INNODB STATUS:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
110829 11:52:01 Error in foreign key constraint of table hospital_db/places:
FOREIGN KEY (pat_id) REFERENCES patients(pat_id),
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8:
Cannot resolve table name close to:
(pat_id),
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id)
) TYPE=InnoDB CHARACTER SET=UTF8

Я использую MySQL v5.1.49.

Ответы [ 3 ]

4 голосов
/ 29 августа 2011

Похоже, что это связано с порядком создания таблиц и имеющимися у вас зависимостями внешнего ключа.

Попробуйте отключить проверку внешнего ключа перед созданием таблиц и включить их после примерно так:

SET foreign_key_checks = 0;
-- Your create queries here
SET foreign_key_checks = 1;

Приветствия

3 голосов
/ 22 августа 2012

Я знаю, что это решено, но для гуглеров здесь я сделал это в MySQL Workbench:

По умолчанию для первичных ключей установлено значение «не ноль»Создание внешнего ключа в дочерней таблице, а также проверка его как «не нулевого» вызовет эту ошибку.Мне потребовались целую вечность, чтобы найти это самому, потому что это исключение из того, что люди предлагают (убедившись, что все в столбце имеет тот же тип, что и родительский ключ).Так что просто оставьте флажок «not null» на внешнем ключе

, хотя это может помочь спасти людей некоторое время:)

1 голос
/ 29 августа 2011

Вы создаете FK на таблице 'местах' до создания этой таблицы. Таблица мест создается после таблицы пациентов , которые пытаются использовать таблицу, которая еще не существует. Похоже, у вас есть внешние ключи. В этом случае лучше создавать таблицы без FK и использовать ALter TABLE для добавления FK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...