不使用触发器在MySQL中创建带前缀的自动生成ID 我需要在 MySQL 中创建一个带前缀且不使用触发器的员工 ID。
要在 MySQL 中创建带有前缀的自动生成的员工 ID 而不使用触发器,您可以按照以下方法之一进行操作:
您可以使用 MySQL 中的 AUTO_INCRMENT 功能自动为您的员工生成唯一 ID。
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_prefix VARCHAR(10) NOT NULL,
employee_number INT
);
-- Insert a row (ID will be automatically generated)
INSERT INTO employees (employee_prefix) VALUES ('EMP');
-- Get the generated ID
SELECT LAST_INSERT_ID();
您可以创建一个结合了前缀和自动递增值的计算列。
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_number INT,
employee_id AS CONCAT('EMP', LPAD(employee_number, 5, '0')) PERSISTENT
);
-- Insert a row (ID will be automatically generated)
INSERT INTO employees (employee_number) VALUES (1);
-- Get the generated employee ID
SELECT employee_id FROM employees WHERE id = LAST_INSERT_ID();
选择最适合您要求的方法,并根据需要调整表和列名称。请记住将“EMP”替换为您想要的前缀。
第一个范例对我来说看起来不错。对于第二个,我认为这不是 MySQL 的正确语法。
但是,要使用生成的列,您可以在两种机会之间进行选择:虚拟/存储。
我的理解是,该示例(使用上述示例,第 2 部分)将使用存储列:
CREATE TABLE `employees` (
`id` INT NOT NULL AUTO_INCREMENT,
`employee_number` INT NULL,
`employee_id` VARCHAR(8) GENERATED ALWAYS AS (CONCAT('EMP', LPAD(employee_number, 5, '0'))) STORED,
PRIMARY KEY (`id`));
INSERT INTO `employees` (`employee_number`) VALUES ('1516');
select * from employees;
+----+-----------------+-------------+
| id | employee_number | employee_id |
+----+-----------------+-------------+
| 1 | 1516 | EMP01516 |
+----+-----------------+-------------+
1 row in set (0.001 sec)
到目前为止,这是一个非常简单的例子。为了进一步开发,我强烈建议检查(根据您的意图)数据类型和边界。