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