我正在使用 MySQL Workbench 5.2 CE,但在构建触发器时遇到问题。我有一个像这样设置的表,“id”字段是自动增量
TABLE
addr VARCHAR
id INT
以及用 Java 编写的批处理语句
String state1 = "insert ignore into TABLE(addr) values (?);"
和像这样设置的触发器
USE <code>DB_NAME</code>;<br/>
DELIMITER $$
<pre><code>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;
</code></pre>
所有这些都是我试图避免自动增量值中的间隙。我使用该表来存储大量与网络相关的信息,因此自动增量字段中的潜在间隙将变得相当大。
触发器的目标是避免插入语句(以及自动增量字段的后续增量)并静默中止。这样自动增量值就保持连续。
快速说明:addr
场是PK。
谢谢。
编辑 2013 年 12 月 4 日 作为更新,我放弃了 AI 字段并选择了复合键。使用稍微多一点的磁盘空间,但我很聪明地标准化了其他字段,所以最终成功了。感谢您的帮助!
最佳答案
不,不,不,不!
不要以这种方式滥用自增主键!它应该是自动生成且不受影响的。就留下它吧。
如果您需要指示插入行的顺序,请使用另一列。例如,具有默认值(例如 current_timestamp
)的 datetime
列。这样它也会自动填充,您无需执行任何操作。
关于java - 创建与批量插入语句一起使用的 mysql 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108241/