【问题标题】:MySQL Workbench cannot add foreign key constraintMySQL Workbench 无法添加外键约束
【发布时间】:2014-07-27 04:26:38
【问题描述】:

我的 SQL 脚本运行良好,直到出现错误 1215。我不知道代码有什么问题。

代码如下:

CREATE DATABASE IF NOT EXISTS ΝΟΣΟΚΟΜΕΙΟ;

CREATE TABLE IF NOT EXISTS ΤΜΗΜΑΤΑ
(ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ INT,
 ΟΝΟΜΑΣΙΑ_ΤΜΗΜΑΤΟΣ CHAR, 
ΣΥΝΟΛΙΚΟΣ_ΑΡΙΘΜΟΣ_ΚΛΙΝΩΝ INT,
 ΔΙΑΘΕΣΙΜΟΣ_ΑΡΙΘΜΟΣ_ΚΛΙΝΩΝ INT,
PRIMARY KEY (ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ));

CREATE TABLE IF NOT EXISTS ΑΣΘΕΝΕΙΣ
(ΚΩΔΙΚΟΣ_ΑΣΘΕΝΗ INT,
 ΟΝΟΜΑ_ΑΣΘΕΝΗ VARCHAR (20), 
ΕΠΩΝΥΜΟ_ΑΣΘΕΝΗ VARCHAR (20),
 ΦΥΛΛΟ VARCHAR (1), 
ΗΜ_ΝΙΑ_ΓΕΝΝΗΣΗΣ DATE,
 ΔΙΕΥΘΥΝΣΗ_ΑΣΘΕΝΗ CHAR ,
 ΤΗΛΕΦΩΝΟ_ΑΣΘΕΝΗ VARCHAR (10),
PRIMARY KEY (ΚΩΔΙΚΟΣ_ΑΣΘΕΝΗ));

CREATE TABLE IF NOT EXISTS ΙΑΤΡΟΙ
(ΚΩΔΙΚΟΣ_ΙΑΤΡΟΥ INT ,
 ΟΝΟΜΑ_ΙΑΤΡΟΥ VARCHAR (20),
 ΕΠΩΝΥΜΟ_ΙΑΤΡΟΥ VARCHAR (20),
 ΕΙΔΙΚΟΤΗΤΑ CHAR,
ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ INT,
 ΔΙΕΥΘΥΝΣΗ_ΙΑΤΡΟΥ CHAR,
 ΤΗΛΕΦΩΝΟ_ΙΑΤΡΟΥ VARCHAR (10),
PRIMARY KEY (ΚΩΔΙΚΟΣ_ΙΑΤΡΟΥ),
FOREIGN KEY (ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ) REFERENCES ΤΜΗΜΑΤΑ(ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ)
);

CREATE TABLE IF NOT EXISTS ΠΕΡΙΣΤΑΤΙΚΑ
(ΚΩΔΙΚΟΣ_ΠΕΡΙΣΤΑΤΙΚΟΥ INT, 
ΚΩΔΙΚΟΣ_ΑΣΘΕΝΗ INT, 
ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ INT,
ΚΩΔΙΚΟΣ_ΙΑΤΡΟΥ INT, 
ΗΜ_ΝΙΑ_ΕΙΣΑΓΩΓΗΣ DATE, 
ΗΜ_ΝΙΑ_ΕΞΙΤΗΡΙΟΥ DATE,
 ΑΞΙΑ_ΠΕΡΙΣΤΑΤΙΚΟΥ INT,
PRIMARY KEY (ΚΩΔΙΚΟΣ_ΠΕΡΙΣΤΑΤΙΚΟΥ),
FOREIGN KEY (ΚΩΔΙΚΟΣ_ΑΣΘΕΝΗ) REFERENCES ασθενεισ(ΚΩΔΙΚΟΣ_ΑΣΘΕΝΗ),
FOREIGN KEY (ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ) REFERENCES τμηματα(ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ),
FOREIGN KEY (ΚΩΔΙΚΟΣ_ΙΑΤΡΟΥ) REFERENCES ιατροι(ΚΩΔΙΚΟΣ_ΙΑΤΡΟΥ)
);

CREATE TABLE IF NOT EXISTS ΚΑΤΗΓΟΡΙΕΣ_ΠΡΟΪΟΝΤΩΝ
(ΚΩΔΙΚΟΣ_ΚΑΤΗΓΟΡΙΑΣ INT,
ΟΝΟΜΑΣΙΑ_ΚΑΤΗΓΟΡΙΑΣ CHAR,
PRIMARY KEY (ΚΩΔΙΚΟΣ_ΚΑΤΗΓΟΡΙΑΣ)
);

CREATE TABLE IF NOT EXISTS ΠΡΟΪΟΝΤΑ
(ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ INT,
 ΚΩΔΙΚΟΣ_ΚΑΤΗΓΟΡΙΑΣ INT,
 ΟΝΟΜΑΣΙΑ_ΠΡΟΪΟΝΤΟΣ CHAR,
 ΑΞΙΑ_ΜΟΝΑΔΑΣ_ΠΡΟΪΟΝΤΟΣ INT,
PRIMARY KEY (ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ),
FOREIGN KEY (ΚΩΔΙΚΟΣ_ΚΑΤΗΓΟΡΙΑΣ) REFERENCES ΚΑΤΗΓΟΡΙΕΣ_ΠΡΟΪΟΝΤΩΝ(ΚΩΔΙΚΟΣ_ΚΑΤΗΓΟΡΙΑΣ)
);

CREATE TABLE IF NOT EXISTS ΧΡΕΩΣΕΙΣ_ΠΕΡΙΣΤΑΤΙΚΩΝ
(ΚΩΔΙΚΟΣ_ΠΕΡΙΣΤΑΤΙΚΟΥ  INT,
ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ  INT,
 ΗΜΕΡΟΜΗΝΙΑ_ΧΡΕΩΣΗΣ DATE,
 ΠΟΣΟΤΗΤΑ INT,
PRIMARY KEY (ΗΜΕΡΟΜΗΝΙΑ_ΧΡΕΩΣΗΣ),
FOREIGN KEY (ΚΩΔΙΚΟΣ_ΠΕΡΙΣΤΑΤΙΚΟΥ) REFERENCES ΠΕΡΙΣΤΑΤΙΚΑ(ΚΩΔΙΚΟΣ_ΠΕΡΙΣΤΑΤΙΚΟΥ),
FOREIGN KEY (ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ) REFERENCES ΠΡΟΙΟΝΤΑ(ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ)
);

.......................

我对发生该错误的最后两个表有疑问。有人可以帮助我吗?

谢谢,迪米特里斯

【问题讨论】:

  • 表名默认区分大小写。在表ΠΕΡΙΣΤΑΤΙΚΑ中,您引用小写形式的表,如 ασθενεισ,但之前您以大写形式定义表,如 ΑΣΘΕΝΕΙΣ。在相同情况下使用表名引用再试一次:ΑΣΘΕΝΕΙΣ。
  • 定义ΧΡΕΩΣΕΙΣ_ΠΕΡΙΣΤΑΤΙΚΩΝ的第二个错误仅仅是因为第一个表ΠΕΡΙΣΤΑΤΙΚΑ创建失败。
  • 虽然我更改了小写字母,但它并不是真正的问题,因为当它创建表格时,所有名称都是小写字母。 ΠΕΡΙΣΤΑΤΙΚΑ 已创建,但当涉及ΠΡΟΙΟΝΤΑ 时,它无法添加外键约束。如果我删除两个外键,那么 ΧΡΕΩΣΕΙΣ_ΠΕΡΙΣΤΑΤΙΚΩΝ 也会这样做:/ ΚΑΤΗΓΟΡΙΕΣ_ΠΡΟΪΟΝΤΩΝ 也被创建,但由于某种原因......错误1215:P

标签: mysql sql database key constraints


【解决方案1】:

我在 Linux、MySQL 5.6.17 上对此进行了测试。我能够通过两个更改来实现它:

  1. 将表名的大小写与创建它们时的拼写方式匹配:

    CREATE TABLE IF NOT EXISTS ΠΕΡΙΣΤΑΤΙΚΑ
    (
            . . . 
            FOREIGN KEY (ΚΩΔΙΚΟΣ_ΑΣΘΕΝΗ) REFERENCES ΑΣΘΕΝΕΙΣ(ΚΩΔΙΚΟΣ_ΑΣΘΕΝΗ),
            FOREIGN KEY (ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ) REFERENCES ΤΜΗΜΑΤΑ(ΚΩΔΙΚΟΣ_ΤΜΗΜΑΤΟΣ),
            FOREIGN KEY (ΚΩΔΙΚΟΣ_ΙΑΤΡΟΥ) REFERENCES ΙΑΤΡΟΙ(ΚΩΔΙΚΟΣ_ΙΑΤΡΟΥ)
    );
    
  2. 使用相同的拼写,包括ΠΡΟΪΟΝΤΑ中的变音符号:

    CREATE TABLE IF NOT EXISTS ΧΡΕΩΣΕΙΣ_ΠΕΡΙΣΤΑΤΙΚΩΝ
    (
            . .  .
            FOREIGN KEY (ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ) REFERENCES ΠΡΟΪΟΝΤΑ(ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ)
    );
    

【讨论】:

  • 我解决了这个问题,但问题仍然存在。不能为ΠΕΡΙΣΤΑΤΙΚΑ、ΠΡΟΪΟΝΤΑ和ΧΡΕΩΣΕΙΣ_ΠΕΡΙΣΤΑΤΙΚΩΝ表添加外键。我没有任何拼写错误
  • 如果您使用mysql -v 运行脚本,您可以找出哪个 CREATE TABLE 出错了。另一种调试方法是逐个注释掉外键声明,然后重试,找出哪个约束失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2021-11-05
相关资源
最近更新 更多