繁体   English   中英

mysql innoDB错误1005

[英]mysql innoDB error 1005

我正在尝试找到在创建表时导致错误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。

这似乎与您创建表的顺序和您拥有的外键依赖关系有关。

尝试在创建表之前禁用外键检查,并在之后启用它们:

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

干杯

我知道这个问题已经解决了,但对于Google员工来说,我在mysql工作台中做了这个:

默认情况下,主键已“检查为非空”。 在子表中创建外键并将其检查为“not null”将导致此错误。 我花了很多时间才发现这一点,因为它是人们建议的例外(确保列中的所有内容与父键的类型相同)。 所以只需在外键上取消选中'not null'即可

认为这可能有助于节省一些时间:)

创建此表之前,您可以在表'places'上创建FK。 是在试图使用尚不存在的表的患者之后创建的。 看来你有外键交叉。 在这种情况下,最好创建没有FK的表,而不是使用ALTER TABLE来添加FK。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM