java - 创建与批量插入语句一起使用的 mysql 触发器

标签 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 <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/

相关文章:

ASP.Net/MySQL 多级菜单

选择查询和 'order by' 子句的 MySQL 问题

Mysql 查询 - GROUP BY 并显示最高的 COUNT(*)

mysql - "The following query failed" ";"“在MySQL中是什么意思?

java - 读取特定频率后,如何使Java程序停止捕获音频?

java - 用于 Android 应用程序开发的最佳 IDE(Netbeans 或 eclipse)?

java - Spring setters/getters 和可变变量

java - 将数据从选项卡式 Activity 中的 fragment 发送到 fragment

.net - WPF触发器更改父属性

mysql - 在插入之前触发生成唯一的 md5 哈希