MySQL 触发器自动增量

Posted

技术标签:

【中文标题】MySQL 触发器自动增量【英文标题】:MySQL Trigger auto increment 【发布时间】:2014-03-13 00:27:32 【问题描述】:

我想创建一个 mysql(v5.5) 触发器,每次我插入一个值时,它都会按一个随机数自动递增。这是我正在做的事情:

DELIMITER $$

DROP TRIGGER IF EXISTS actCodeAuto
$$
CREATE TRIGGER actCodeAuto BEFORE INSERT ON activity
FOR EACH ROW BEGIN
  DECLARE newNumber INT DEFAULT 1;
  SELECT Max(activityCode) INTO newNumber FROM activity;
  IF(newNumber=NULL) THEN
    SET new.activityCode=100;
  ELSE
    SET new.activityCode = newNumber+FLOOR(1+RAND()*3);
  END IF;
END$$

DELIMITER ;

我想在每次插入一行时自动将一个随机数增加到列activityCode 的最大值,除非我第一次插入一行时,我想将 Max(activityCode) 设置为 100。

当我第一次插入一行时,MySQL只是报错:(1048, "Column 'activityCode' cannot be null")

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

SQL 中 Null 不等于 null。

所以这永远不会是真的:

IF(newNumber=NULL) THEN

你需要:

IF(newNumber IS NULL) THEN

【讨论】:

我想通了!谢谢!

以上是关于MySQL 触发器自动增量的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有触发器和手动插入的情况下在 mysql 中生成/自动增量 guid?

Oracle 自动增量触发器问题

用于Java开发人员的Oracle数据库中的自动增量

在 Oracle 中定义自动增量时插入触发器的行为

在 phpMyadmin 中重新设置表的自动增量的触发器

mysql触发器不再正常工作