错误1215无法添加外键约束

时间:2015-03-04 11:04:34

标签: mysql sql-server

我已经阅读了几篇关于此类错误的帖子(其中一篇非常相似),但我还没有找到一篇能解决我使用外键的错误。由于我可以重新创建错误,我想我对它的含义非常了解。我是SQL新手,但我无法解决问题。以下是两个受影响的表格中的代码:

create table artist (
     artist_id int unsigned not null auto_increment,
     first_name nvarchar(50) not null,
     last_name nvarchar(50) not null,
     about_artist nvarchar(550) not null,
     start_of_event datetime,
     end_of_event datetime,
     item_id int unsigned not null,
     user_id int unsigned not null,
     last_modified timestamp,
     primary key (artist_id),
     foreign key (item_id) references 
        items (item_id),
    foreign key (user_id) references 
        users (user_id)

 );

 create table items (
     item_id int unsigned not null auto_increment,
     artist_id int unsigned not null,
     item_name nvarchar(50) not null,
     item_description nvarchar(150) not null,
     last_modified timestamp,
     primary key (item_id),
     foreign key (artist_id) references 
        artist(artist_id)
 );

我的item_id在第一个表格中为item_id int unsigned not null,在第二个表格中为item_id int unsigned not null auto_increment。第二个表是主键。我不能在一个表中执行两次自动增量,如果我颠倒了表的顺序,则使用不同的列会发生同样的事情。我该如何解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:0)

考虑到我的评论,我越来越相信链接表是您需要的方式。

create table artist (
    artist_id int unsigned not null auto_increment,
    first_name nvarchar(50) not null,
    last_name nvarchar(50) not null,
    about_artist nvarchar(550) not null,
    start_of_event datetime,
    end_of_event datetime,
    user_id int unsigned not null,
    last_modified timestamp,
    primary key (artist_id),
    foreign key (user_id) references 
        users (user_id)
);

create table items (
    item_id int unsigned not null auto_increment,
    artist_id int unsigned not null,
    item_name nvarchar(50) not null,
    item_description nvarchar(150) not null,
    last_modified timestamp,
    primary key (item_id)
);

create table artist_item (
    artist_id int unsigned not null,
    item_id int unsigned not null
    foreign key (artist_id) references
        artist(artist_id),
    foreign key (item_id) references
        items(item_id)
);

您可以向artist_item添加自动增量字段,或将两个ID字段作为复合键。

通过此功能,您可以查询与艺术家相关的所有项目(例如,一位艺术家有多个项目):

select
    *
from 
    artist_item join items on 
        artist_item.item_id = items.item_id
where
    artist_item.artist_id = [ID]

或与项目相关的所有艺术家(例如,一个项目由几位艺术家处理):

select
    *
from 
    artist_item join artist on
        artist_item.artist_id = artist.artist_id
where
    artist_item.item_id = [ID]