MySQL触发器自动插入一年中的一周和001(自动增量)

时间:2016-07-18 14:44:42

标签: mysql triggers

我想设置MySQL触发器以使用以下格式设置ID号:

一年中的一周+ 001

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

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

2 个答案:

答案 0 :(得分:0)

使用具有MYSQL日期功能的CONCAT

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$$ 

答案 1 :(得分:0)

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

所以这是一个非传统的解决方案:不要考虑使用触发器,使用主键。在每周开始时,运行预定作业以提前下一个自动增量编号。

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

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

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