【问题标题】:MySQL Trigger to auto insert week of the year and 001 (autoincrement)MySQL触发器自动插入一年中的一周和001(自动增量)
【发布时间】:2016-07-18 14:44:42
【问题描述】:

我想设置一个 MySQL 触发器来设置一个具有以下格式的 ID 号:

一年中的第几周 + 001

例如,09002 将是一年中的第 9 周,002 将是该周的第二个订单。

任何帮助,评论将不胜感激,谢谢。

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    将 CONCAT 与 MYSQL 日期函数周一起使用

    select CONCAT('0',WEEK(now()),'002');
    +-------------------------------+
    | CONCAT('0',WEEK(now()),'002') |
    +-------------------------------+
    | 029002                        |
    +-------------------------------+
    1 row in set (0.05 sec)
    
        DROP TRIGGER IF EXISTS TEST_INSERT;
        DELIMITER $$
        CREATE TRIGGER TEST_INSERT AFTER INSERT ON TEST FOR EACH ROW BEGIN
         NEW.ID= CONCAT('0',WEEK(now()),'002')
    -------------------- your insert statement ----------
        END$$ 
    

    【讨论】:

    • 在触发器中你可以添加你的插入语句
    【解决方案2】:

    在 MySQL 中使用触发器执行此操作是一个问题,因为 MySQL 没有 SEQUENCE 对象,就像其他一些 SQL 数据库一样。您不能在触发器中生成递增的 id 值,必须生成它以填充具有 AUTO_INCREMENT 选项的整数列。

    所以这是一个非常规的解决方案:不要考虑为此使用触发器,使用主键。在每周开始时,运行计划的作业以推进下一个自增数字。

    ALTER TABLE mytable AUTO_INCREMENT = WEEK(NOW())*1000;
    

    您可以通过 cron 作业执行此操作,也可以使用 MySQL Event Scheduler

    我还要评论说,您不能依赖递增的 id 是连续的。您可能有失败的插入,或者您可能有一些插入是回滚事务的一部分,或者您可能有以后的删除。所有这些都会消除具有特定 id 值的行,并且您不应该重复使用 id 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多