繁体   English   中英

MySQL-无法定义外键

[英]MySQL - can't define foreign key

我正在尝试使用Python在Wamp服务器上创建表。 有两个表-人员和消息。 表消息具有一列person_id,该列应为表人员的外键。

创建表后,通过PhpMyAdmin查看消息表中没有外键。 SQL查询有问题吗?

创造人:

@staticmethod
def createTablePerson():
    return "CREATE TABLE IF NOT EXISTS person (" \
           "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY," \
           "name VARCHAR(100)," \
           "surname VARCHAR(100)" \
           ");"

消息创建:

@staticmethod
def createTableMessage():
    return "CREATE TABLE IF NOT EXISTS message (" \
           "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY," \
           "personID INT NOT NULL REFERENCES person (id)," \
           "text VARCHAR(1000)" \
           ");"

MySQL解析但忽略“内联REFERENCES规范”(如SQL标准所定义),其中引用被定义为列规范的一部分。 MySQL仅在作为单独的FOREIGN KEY规范的一部分指定时才接受REFERENCES子句。

参考: http : //dev.mysql.com/doc/refman/5.5/en/create-table.html


因此,要添加外键约束(对于支持它们的存储引擎),必须与列分开定义外键。

这样,REFERENCES子句将被忽略:

personID INT NOT NULL REFERENCES person (id),

要让MySQL添加外键约束,请按照以下步骤操作:

personID INT NOT NULL, 
...
FOREIGN KEY (personID) REFERENCES person (id),
...

在添加为外键之前,您需要index该列。 命令应为

CREATE TABLE IF NOT EXISTS person (
           id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
           name VARCHAR(100),
           surname VARCHAR(100)
  );

CREATE TABLE IF NOT EXISTS message (
           id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
           text VARCHAR(1000),
           personID INT NOT NULL,
           INDEX personid_idx (personID),
           FOREIGN KEY (personID)  REFERENCES person (id)

           );

暂无
暂无

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

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