2016-03-08 76 views
0

什么,我想出了迄今为止我怎样写插​​入之前触发检查重复检查6000+记录

CREATE TRIGGER no_duplicate BEFORE INSERT ON street_master 
FOR EACH ROW 
BEGIN 
IF(EXISTS(SELECT id from street_master WHERE name=NEW.name)) 
THEN ; 
END IF; 
END 

我应该写在“然后”的一部分,我得到语法错误,每次我写选择声明或任何其他......

+0

@ eggyal..please精心...我一直在思考这个几个小时,在没有任何歌厅解决 –

回答

1

如记录IF Syntax下:

每个statement_list由一个或多个SQL语句组成;空的statement_list是不允许的。

可能考虑使用SIGNAL引发错误,或者故意进行错误的操作(如调用一个不存在的程序)。但这是错误的方式来解决这个问题。

你真正想要的是定义一个UNIQUE索引。作为CREATE INDEX Syntax下记载:

UNIQUE索引创建,使得索引中的所有值必须是不同的约束。如果尝试使用与现有行匹配的键值添加新行,则会发生错误。

这样:

CREATE UNIQUE INDEX uniqueNames ON street_master (name); 
+0

“身份证”是我的唯一约束......所以if语句尝试检索副本的'id'(如果存在),即OLD.name = NEW。名称,其中“名称”是街道名称,并在表格street_master中。我只想在插入之前匹配两个字符串。一个是我插入新的,另一个是来自数据库的一个。 –

+0

'UNIQUE'是要去的地方。 –

+0

name是一个用户输入,'id' - > UNIQUE由系统自动定义.....所以我必须在现有记录中匹配'name',然后才能在表中插入新记录 –