我已经阅读了几篇关于此类错误的帖子(其中一篇非常相似),但我还没有找到一篇能解决我使用外键的错误。由于我可以重新创建错误,我想我对它的含义非常了解。我是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
。第二个表是主键。我不能在一个表中执行两次自动增量,如果我颠倒了表的顺序,则使用不同的列会发生同样的事情。我该如何解决这个问题?谢谢。
答案 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]