【问题标题】:#1005 - Can't create table 'demo.survey' (errno: 150)#1005 - 无法创建表“demo.survey”(错误号:150)
【发布时间】:2015-02-07 11:38:19
【问题描述】:

我必须使用外键创建调查表,但它给出了错误。喜欢

1005 - 无法创建表“demo.survey”(错误号:150)

那我该怎么办..

CREATE TABLE Survey
(
    sno INT NOT NULL AUTO_INCREMENT,
    sname TEXT NOT NULL,
    sfpname VARCHAR(20) NOT NULL,
    sdate TIMESTAMP NOT NULL,
    sfcrno INT NOT NULL,
    sfpno INT NOT NULL,
    FOREIGN KEY(sfpname) REFERENCES Product(pname),
    FOREIGN KEY(sfcrno) REFERENCES SurveyCreater(crno),
    FOREIGN KEY(sfpno) REFERENCES Product(pno),
    PRIMARY KEY(sno)
);

CREATE TABLE SurveyCreater
(
    crno INT NOT NULL AUTO_INCREMENT,
    crname TEXT NOT NULL,
    dob DATE NOT NULL,
    gender TEXT NOT NULL,
    address TEXT,
    city TEXT,
    state TEXT,
    contact TEXT NOT NULL,
    email VARCHAR(30) NOT NULL,
    PRIMARY KEY(crno)               
);
CREATE TABLE Product
(
    pno INT NOT NULL AUTO_INCREMENT,
    pname VARCHAR(20) NOT NULL,
    pdate TIMESTAMP NOT NULL,
    pfcrno INT NOT NULL,
    FOREIGN KEY(pfcrno) REFERENCES SurveyCreater(crno),
    PRIMARY KEY(pno) 
);

【问题讨论】:

  • FOREIGN KEY(sfpno) REFERENCES Product(pno),外键只能引用主键或唯一键,我在 pno 上添加了唯一键,如果设置外键检查 = o,则表的顺序无关紧要,所以你没有移动表格见sqlfiddle.com/#!2/ef3b4
  • 我按照你的解决方法试了。这行得通。谢谢...

标签: mysql foreign-keys


【解决方案1】:

您的表集成了相互引用的外键。因此,创建顺序很重要,因为您只能引用另一个表/列(如果存在)。

关于您提供的 SQL 代码,按以下顺序创建表:

  1. SurveyCreater(没有外键)
  2. 产品(仅参考 SurveyCreater)
  3. 调查(参考 SurveyCreater 和 Product)

【讨论】:

    【解决方案2】:

    您引用了不存在的外键列,这就是 mySQl 错误 150 即将到来的原因尝试按以下顺序执行您的创建查询。

    • 调查创建者
    • 产品
    • 调查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2012-02-19
      • 2020-04-10
      • 2013-07-22
      • 2017-04-09
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多