我正在使用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字段,而是选择了复合键。使用稍多的磁盘空间,但我很聪明地规范化其他字段,所以它最终得到了解决。谢谢你的帮助!
答案 0 :(得分:1)
不要以这种方式滥用自动增量primay键!它意味着自动生成和不受影响。离开吧。
如果您需要一个指标,您的行在哪个位置插入,然后使用另一列。例如datetime
列,其默认值为current_timestamp
。这样它也会自动填充,你不需要做任何事情。