首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -无法定义外键

问MySQL -无法定义外键
EN

Stack Overflow用户
提问于 2015-02-15 17:31:33
回答 2查看 270关注 0票数 0

我试图使用Python在Wamp服务器上创建表。有两张桌子--人和信息。表消息有一个列person_id,它应该是表person的外键。

在创建表之后,当我通过PhpMyAdmin查看消息表时,它中没有外键。SQL查询有什么问题吗?

人的创造:

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

信息的产生:

代码语言:javascript
复制
@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)" \
           ");"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

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

这样,引用子句就会被忽略:

代码语言:javascript
复制
personID INT NOT NULL REFERENCES person (id),

要让MySQL添加外键约束,请执行如下操作:

代码语言:javascript
复制
personID INT NOT NULL, 
...
FOREIGN KEY (personID) REFERENCES person (id),
...
票数 1
EN

Stack Overflow用户

发布于 2015-02-15 17:40:52

在添加外键之前,需要对列进行index。这些命令应该是

代码语言:javascript
复制
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)

           );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28528932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档