【问题标题】:Creating a mysql trigger for use with batch insert statements创建用于批量插入语句的 mysql 触发器
【发布时间】:2013-10-07 03:27:17
【问题描述】:

我正在使用 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 字段并选择了复合键。使用稍微多一点的磁盘空间,但我很聪明地规范了其他字段,所以它最终解决了。感谢您的帮助!

【问题讨论】:

  • 这里有什么问题?

标签: java mysql triggers insert mysql-workbench


【解决方案1】:

不,不,不,不!

不要以这种方式滥用自增主键!它应该是自动生成的并且不受影响。放手吧。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多