【问题标题】:Trigger to prevent inserting 2 same values in one table触发器以防止在一个表中插入 2 个相同的值
【发布时间】:2012-01-16 03:57:26
【问题描述】:

我在为我的 dtb 编程触发器方面没有什么问题。我需要在一张 1 表中控制 2 个值。我有一个名为 Concert 的表,它有 2 个外键:1 是表 Place 的 id。我认为第二个并不重要。

演唱会id_concert, id_place<fk>, id_organizer<fk>, date, name, sponsor

地点id_place, name, capacity, adress, town

我想消除的是,同一天举办的两场音乐会不能在一个地方。因此,如果已经存在具有此值的音乐会,我需要以某种方式控制该用户不能为音乐会插入相同的日期和相同的地点。

非常感谢您的建议,抱歉英语不好。

【问题讨论】:

  • 这是什么类型的数据库,即 MySQL、Oracle、SQL Server....

标签: oracle triggers


【解决方案1】:

您需要在 Concert 表上添加一个由 (id_place, date) 对组成的唯一约束。这将指示数据库引擎在同一时间不允许多于一个 Concert。

对于 Oracle,可以在此处找到信息:http://www.techonthenet.com/oracle/unique.php

CREATE TABLE Concert
(   
 ... (filled in with your existing table definition)
 CONSTRAINT concert_place_unique UNIQUE (id_place, date)
);

或更改现有表:

ALTER TABLE Concert
add CONSTRAINT concert_place_unique UNIQUE (id_place, date);

约束是处理这种情况的正确方法,而不是触发器。约束是数据库固有的,没有竞争条件,并且首先阻止添加数据。

【讨论】:

  • 我刚刚意识到我还需要日期应该是今天或未来。那么,我应该触发日期并为这两个值设置唯一约束吗? :)
  • 哦,是的,我已经做到了,这很容易。无论如何,谢谢你的时间:)
猜你喜欢
  • 2016-10-03
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
相关资源
最近更新 更多