MySQL - 无法定义外键

时间:2015-02-15 17:31:33

标签: python mysql phpmyadmin foreign-keys wamp

我正在尝试使用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)" \
           ");"

2 个答案:

答案 0 :(得分:1)

  

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

参考: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),
...

答案 1 :(得分:0)

在添加为外键之前,您需要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)

           );