📜  mysql 自动增加带有前缀月份和年份的默认值 - SQL (1)

📅  最后修改于: 2023-12-03 15:03:07.224000             🧑  作者: Mango

MySQL 自动增加带有前缀月份和年份的默认值 - SQL

MySQL通过使用TRIGGER可以在很多方面自动化处理数据库。在此建议,我们将介绍如何使用TRIGGER在MySQL中创建一个带有前缀月份和年份的默认值。

准备工作

在开始创建TRIGGER之前,请确保您的MySQL版本为5.6或更高版本,并已经创建了一个目标表,用于在预期的列中存储日期和时间戳。 在此例中,我们将创建一个名为orders的表,并使用DATETIME数据类型来存储日期和时间戳。

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `order_number` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建 TRIGGER

下一步是创建TRIGGER,以确保在插入新记录时,order_number列中带有月份和年份的前缀。TRIGGER将包括两个部分:BEFORE INSERT和FOR EACH ROW。 在BEFORE INSERT中,我们将使用MySQL的DATE_FORMAT函数生成带有月份和年份前缀的新字符串。在FOR EACH ROW中,我们将使用NEW关键字为新记录分配新的值。

DELIMITER $$

CREATE TRIGGER `orders_bi` 
BEFORE INSERT ON `orders` 
FOR EACH ROW 
BEGIN
  SET NEW.order_number = CONCAT(DATE_FORMAT(NOW(), '%Y%m'), '-', NEW.id);
END$$

DELIMITER ;
TRIGGER解释
  • DELIMITER:在同一命令中指定多个SQL语句时,用于告诉MySQL在何处分隔命令。
  • TRIGGER:关键字用于定义TRIGGER。
  • orders_bi:TRIGGER的名称,可以根据需要调整。
  • BEFORE INSERT:指定TRIGGER的操作类型,在此例中为INSERT。
  • orders:目标表名称。
  • FOR EACH ROW:指定TRIGGER应该针对每个新的记录运行。
  • SET NEW.order_number:设置新插入的记录的order_number列的值。
  • NEW.id:代表新插入的记录的id列的值。
测试 TRIGGER

TRIGGER已创建并准备好在新记录插入时运行。让我们尝试插入几条新记录并查看结果。

INSERT INTO `orders` (`order_number`) VALUES (NULL);
INSERT INTO `orders` (`order_number`) VALUES (NULL);
INSERT INTO `orders` (`order_number`) VALUES (NULL);

查询orders表以查看结果如下:

SELECT * FROM `orders`;

| id | order_date | order_number | |----|---------------------|--------------| | 1 | 2022-01-20 14:50:42 | 202201-1 | | 2 | 2022-01-20 14:50:47 | 202201-2 | | 3 | 2022-01-20 14:50:52 | 202201-3 |

可以看到,TRIGGER已成功为新记录创建了带有月份和年份前缀的order_number值。

总结

通过使用MySQL的TRIGGER功能,我们可以在很多方面自动化管理数据库。 在此示例中,我们展示了如何使用TRIGGER来创建带有月份和年份前缀的默认值。这样的默认值可方便地组织和管理数据库中的数据。