Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL触发器自动插入年度周和001(自动增量)_Mysql_Triggers - Fatal编程技术网

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

MySQL触发器自动插入年度周和001(自动增量),mysql,triggers,Mysql,Triggers,我想设置一个MySQL触发器,用以下格式设置一个ID号: 年度第一周+001 例如,09002将是一年中的第9周,002将是该周的第二个订单 任何帮助、评论都将不胜感激,谢谢。使用CONCAT和MYSQL DATE函数WEEK select CONCAT('0',WEEK(now()),'002'); +-------------------------------+ | CONCAT('0',WEEK(now()),'002') | +-----------------------------

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

年度第一周+001

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


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

使用CONCAT和MYSQL DATE函数WEEK

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

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

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

ALTER TABLE mytable AUTO_INCREMENT = WEEK(NOW())*1000;
您可以从cron作业中执行此操作,也可以使用


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

在触发器中,您可以添加insert语句