漫天啊 2023-03-25 10:21 采纳率: 73.3%
浏览 10
已结题

sql建表(有联合主键,外键)出现Can't create table 'store4.stu2' (errno: 150)


CREATE TABLE class(
cid INT NOT NULL,
cname VARCHAR(10)
);
CREATE TABLE stu2(
sid INT,
sname VARCHAR(10),
sage INT NOT NULL,
sid_number VARCHAR(18),
scla_name VARCHAR(10),
CONSTRAINT pk_stu2_sid_number PRIMARY KEY(sid,sid_number),
CONSTRAINT fk_stu2_scla_name FOREIGN KEY(scla_name) REFERENCES class(cname),
CONSTRAINT uq_stu2_sname UNIQUE(sname)
); 

其中class表已经建立好,在建立stu2时出现Can't create table 'store4.stu2' (errno: 150)这个问题,为什么会出现这个问题,怎么改正

  • 写回答

2条回答 默认 最新

  • IT_service_mesh 2023-03-25 10:35
    关注

    参考GPT和自己的思路:这个问题是因为在stu2表中引用了class表的cname字段,但是cname字段不是class表的主键。所以需要确保stu2表中引用的字段是class表的主键(cid字段)。您需要将scla_name字段改为cid字段,如下所示:

    
    CREATE TABLE class(
    cid INT NOT NULL,
    cname VARCHAR(10),
    PRIMARY KEY (cid)
    );
    CREATE TABLE stu2(
    sid INT,
    sname VARCHAR(10),
    sage INT NOT NULL,
    sid_number VARCHAR(18),
    scla_cid INT,
    CONSTRAINT pk_stu2_sid_number PRIMARY KEY(sid,sid_number),
    CONSTRAINT fk_stu2_scla_cid FOREIGN KEY(scla_cid) REFERENCES class(cid),
    CONSTRAINT uq_stu2_sname UNIQUE(sname)
    ); 
    

    这样就可以成功创建stu2表了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日