Mysql 制作触发器以防止在不同的表上插入相同的数据
我需要一些帮助。Mysql 制作触发器以防止在不同的表上插入相同的数据,mysql,sql,sql-server,Mysql,Sql,Sql Server,我需要一些帮助。 我创建了如下所示的三个表,一个曲目、一个作曲家和一个艺术家,我想设置一个约束,防止插入已经是艺术家的作曲家,反之亦然。 因此,我想创建一个触发器,当我插入一个已在Artister as中的新作曲家时,会显示一条错误消息,如果我插入一个已在composer中的艺术家,则会显示相同的消息。 我希望我也能明白。请帮帮我 create table track ( title varchar (255), number integer, duration interval, pr
我创建了如下所示的三个表,一个曲目、一个作曲家和一个艺术家,我想设置一个约束,防止插入已经是艺术家的作曲家,反之亦然。
因此,我想创建一个触发器,当我插入一个已在Artister as中的新作曲家时,会显示一条错误消息,如果我插入一个已在composer中的艺术家,则会显示相同的消息。
我希望我也能明白。请帮帮我
create table track (
title varchar (255),
number integer,
duration interval,
primary key (title, number)
foreign key (title) references band (title)
);
create table composer (
title varchar (255),
number integer,
name varchar (255),
primary key (title, number, name)
foreign key (title, number) track references (title, number)
foreign key (name) references person (name)
);
create table artist (
title varchar (255),
number integer,
name varchar (255),
primary key (title, number, name)
foreign key (title, number) track references (title, number)
foreign key (name) references person (name)
);
1) 您使用的是mysql还是ms sql server,您可能不应该同时使用这两个标签。2) 如何根据ID或名称确定重复项--多人可以使用相同的名称。3) 你可能一开始就不应该有这种设计。人们通常从艺术家开始,然后成为作曲家,反之亦然。通常他们都是为同一首歌。您可能应该有一个“艺术家”表,然后逻辑上艺术家角色,如“作曲家”、“声乐”、“器乐”、“歌词”将应用于给定的曲目/艺术家组合。请注意,这样的重新设计消除了您的问题。您要做的是阻止插入,对吗?检查这个答案:或者想想GaryWalker说的(;我认为@GaryWalker一针见血。虽然我当时不会称它为艺术家。给它一个稍微更一般的名字,你也可以通过添加额外的角色将混合器甚至营销人员存储在你的数据库中。很抱歉使用了错误的标签,我刚刚发现我使用的是PostgreSQL。重复项必须用t确定他键入与曲目相关的标题和编号。表格中必须有此设计,以便了解tr曲目是为一位艺术家还是为一位作曲家制作的,但不能同时由两位艺术家和一位艺术家完成,而且艺术家不能是作曲家。(Edofsource)问题是使触发器测试另一个表中是否已经存在相同的标题和编号,以及同一个触发器是否可以在两个表上测试该标题和编号