创建用于批处理插入语句的mysql触发器

时间:2013-10-01 04:51:38

标签: java mysql triggers insert mysql-workbench

我正在使用MySQL Workbench 5.2 CE,但我无法构建触发器。我有一个像这样的表设置,'id'字段是一个自动增量

TABLE
addr  VARCHAR
id    INT

和用Java编写的批处理语句

String state1 = "insert ignore into TABLE(addr) values (?);"

和触发器设置如此

USE DB_NAME;
DELIMITER $$

DB_NAME

CREATE TRIGGER `check_addr` BEFORE INSERT ON tableFOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
IF ( SELECT * FROM table WHERE addr = NEW.addr ) = 0
THEN insert into table(addr) values (NEW.addr);
END IF;

所有这些都是我试图避免我的自动增量值中的空白。我正在使用该表来存储大量与网络相关的信息,因此自动增量字段中的潜在差距会非常大。

触发器的目标是避免insert语句(以及随后的自动增量字段的增量)并静默中止。这样,自动增量值保持连续。

快速说明:CREATE TRIGGER `check_addr` BEFORE INSERT ON tableFOR EACH ROW -- Edit trigger body code below this line. Do not edit lines above this one IF ( SELECT * FROM table WHERE addr = NEW.addr ) = 0 THEN insert into table(addr) values (NEW.addr); END IF; 字段是PK。

感谢。

编辑12/4/2013 就像更新一样,我放弃了AI字段,而是选择了复合键。使用稍多的磁盘空间,但我很聪明地规范化其他字段,所以它最终得到了解决。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

不,不,不是!

不要以这种方式滥用自动增量primay键!它意味着自动生成和不受影响。离开吧。

如果您需要一个指标,您的行在哪个位置插入,然后使用另一列。例如datetime列,其默认值为current_timestamp。这样它也会自动填充,你不需要做任何事情。

相关问题