mysql - 使用自动增量字段插入触发器之前/之后

标签 mysql triggers

我在使用应该修复表中列的插入触发器时遇到了问题:

id        - auto increment int
thread_id - int [NULL]

我想要实现的是将 thread_id 设置为 id 如果它被插入为 NULL。我失败了,因为:

  • 使用 before insert 触发器仍然没有 id 的新值并且神秘地将 thread_id 设置为 0
  • 使用 after insert - update 触发器抛出合理的异常无法更新表,因为它已被语句使用
  • 不能添加额外的自增字段

这个问题的解决方案是什么?

最佳答案

我发现获得新增量值的唯一方法不是花哨的形式。我假设您要插入一个新值,所以它应该是最大 id + 1:

CREATE TRIGGER mytrigger BEFORE INSERT ON yourtable 
FOR EACH ROW BEGIN
SET NEW.thread_id = IF(
ISNULL(NEW.thread_id), 
(SELECT MAX(id) + 1 FROM yourtable), 
NEW.thread_id);
END;

它适用于我的情况,如果它为 NULL,它将获得最大 ID + 1,这将是新 ID。

关于mysql - 使用自动增量字段插入触发器之前/之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5991464/

相关文章:

mysql - 需要帮助开发一个 mysql View 来分割逗号分隔的行值

c# - Convert.ToDecimal 在加载 DirectX/Direct3D 时给出不同的结果

database - 级联更新到相关对象

sql-server - TSQL 使触发器静默失败

php - PDOException 在 Zend Framework 2 + Doctrine 上找不到驱动程序

php - mySql 数据如何存储在应动态创建的唯一 Excel 文件中

mysql - 确保一个表中的记录在加入时总是覆盖其他表

mysql触发器 "without"FOR EACH ROW

Oracle:搜索所有存储的过程/触发器/其他数据库代码?

postgresql - PostgreSQL 数据库中的时间触发器