首页 文章

MySql中的外键作为复合主键

提问于
浏览
2

我有一个名为Shop with this 3 tables的数据库:

create table usr(
    id_usr varchar(20) not null,
    primary key(id_usr)

);

create table product(
    id_product varchar(20) not null,
    id_size varchar(20) not null,
    price float(4,2) unsigned,
    primary key(id_product,id_size)
);

create table cart(
    myUser varchar(20), 
    mySize varchar(20),
    product varchar(20),
    qty int not null,
    primary key(myUser,product,mySize),
    FOREIGN KEY (myUser) REFERENCES usr (id_usr),
    FOREIGN KEY (product) REFERENCES product (id_product),
    FOREIGN KEY (mySize) REFERENCES product (id_size)
);

当我在sql中编译时,它给了我这条消息:

1005 - 无法创建表'Shop.cart'(错误号:150)

如果我尝试删除外键mySize(FOREIGN KEY(mySize)REFERENCES prodotto(id_size))它有效,为什么我这条消息?

2 回答

  • 1

    您正在对 product 表进行FK引用,但仅定义部分键 . 尝试...

    FOREIGN KEY (product, mySize) REFERENCES product (id_product, id_size),
    
  • 3

    我的猜测是你还没有创建你的 prodotto 表 . 这有效:

    create table user(
        id_user varchar(20) not null,
        primary key(id_user)
    
    );
    
    create table product(
        id_product varchar(20) not null,
        id_size varchar(20) not null,
        price float(4,2) unsigned,
        primary key(id_product,id_size)
    );
    
    create table prodotto (
      id_size varchar(20) primary key
    );
    
    create table cart(
        myUser varchar(20), 
        mySize varchar(20),
        product varchar(20),
        qty int not null,
        primary key(myUser,product,mySize),
        FOREIGN KEY (myUser) REFERENCES user (id_user),
        FOREIGN KEY (product) REFERENCES product (id_product),
        FOREIGN KEY (mySize) REFERENCES prodotto (id_size)
    );
    

相关问题