如何在我的sql中更改年份时动态执行一组语句

问题描述 投票:1回答:1

我有一个表来生成其名称的自动增量编号

table1_seq

CREATE TABLE table1_seq
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

它将从每个插入开始并递增1

我想要的是我可以将这个table1_seq重新从1年改为2019年到2020年。我在教程中看到它说

您不能将计数器重置为小于或等于任何已使用的值。

所以根据我的知识,当年份变化时我们必须截断表table1_seq并将自动增量设置为1

我们可以通过触发器或事件或其他技术改变年份来动态地做到这一点,请帮助我

谢谢。

mysql
1个回答
0
投票

您的逻辑存在问题。

例如:

1)无法保证您的记录将在2020-01-01 00:00:002020-01-01 23:00:002020-01-31 00:00:00上发布

2)因此,基于插入设置截断变得困难。

3)另一个问题是触发器将在每次插入时触发,对于需要每年执行一次的事件。这将导致每个查询的事务数量增加。

在这里,我会推荐event_schedulercron,这将在2020-01-01 00:00:00上运行截断表

1)解决方案(event_scheduler

DELIMITER $$

CREATE 
    EVENT truncate_table1_seq
    ON SCHEDULE EVERY 1 YEAR STARTS '2019-01-01 00:00:00'
    DO BEGIN
        TRUNCATE table1_seq;
    END$$
DELIMITER ;

默认情况下,调度程序未打开,您已运行以下命令。

SET GLOBAL event_scheduler = ON;

2)解决方案(cron)

第1步:在linux终端上运行crontab -e命令。

第2步:0 0 1 1 * /usr/bin/mysql --user=[user_name] --password=[password] [db_name] < /home/[user]/recurring-job.sql复制命令并粘贴它。

点击ctrl-X并输入“Yes”进行保存并退出。

其中[username]和[password]是你的mysql用户名密码。创建一个文件recurring-job.sql并粘贴您的查询TRUNCATE table1_seq;

© www.soinside.com 2019 - 2024. All rights reserved.