我想设置MySQL触发器以使用以下格式设置ID号:
一年中的一周+ 001
例如09002将是一年中的第9周,002将是该周的第二个订单。
任何帮助,评论将不胜感激,谢谢。
答案 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值。