我试图使用Python在Wamp服务器上创建表。有两张桌子--人和信息。表消息有一个列person_id,它应该是表person的外键。
在创建表之后,当我通过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)" \
");"发布于 2015-02-15 18:25:12
MySQL解析但忽略了“内联
REFERENCES规范”(如SQL标准中定义的),其中引用被定义为列规范的一部分。MySQL只在指定为单独FOREIGN KEY规范的一部分时才接受FOREIGN KEY子句。
参考资料:http://dev.mysql.com/doc/refman/5.5/en/create-table.html
因此,要添加外键约束(对于支持外键的存储引擎),必须将外键与列分开定义。
这样,引用子句就会被忽略:
personID INT NOT NULL REFERENCES person (id),要让MySQL添加外键约束,请执行如下操作:
personID INT NOT NULL,
...
FOREIGN KEY (personID) REFERENCES person (id),
...发布于 2015-02-15 17:40:52
在添加外键之前,需要对列进行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)
);https://stackoverflow.com/questions/28528932
复制相似问题