MySQL触发器自动递增

标签 mysql sql triggers

我想创建一个 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' can not be null")

有什么想法吗?谢谢!

最佳答案

Null 不等于 SQL 中的 null。

所以这永远不会是真的:

IF(newNumber=NULL) THEN

您需要:

IF(newNumber IS NULL) THEN

关于MySQL触发器自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366740/

相关文章:

mysql - ASP.NET 5 MySql 支持

php - 使用表单选择日期范围内的数据

sql - 发送数据以显示为列

mysql - 在 Heroku 上使用 Jaws Maria DB 的 Laravel 应用程序出现 MYSQL 错误

mysql - 如何在mysql中获取触发器中的过程输入参数

mysql - 加载数据 INFILE - 绝望地卡住了

c# - 事务(进程 ID 84)在锁定资源上与另一个进程发生死锁,并已被选为死锁牺牲品

sql - 通过作为触发器参数传递的列名访问触发器中的记录字段

mysql - 如何在 mysql 触发器中使用别名?

mysql - 如果获取表中没有数据,则在插入之前触发触发错误。