0

我正在使用 MySQL Workbench 5.2 CE,但在构建触发器时遇到了麻烦。我有一个像这样设置的表,“id”字段是一个自动增量

TABLE
addr  VARCHAR
id    INT

和一个用 Java 编写的批处理语句

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

和这样设置的触发器

USE DB_NAME;
DELIMITER $$

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;

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

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

快速说明:该addr字段是一个 PK。

谢谢。

编辑 2013 年 12 月 4 日作为更新,我删除了 AI 字段并选择了复合键。使用稍微多一点的磁盘空间,但我很聪明地规范了其他字段,所以它最终解决了。谢谢您的帮助!

4

1 回答 1

1

不不不不!

不要以这种方式滥用自动增量主键!它应该是自动生成的并且不受影响。就别管了。

如果您需要一个指示符,您的行插入的顺序是什么,然后使用另一列。例如datetime具有默认值的列,例如current_timestamp. 这样它也会自动填充,您无需执行任何操作。

于 2013-10-01T06:14:14.643 回答