[英]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.