在MySQL中不使用触发器创建带前缀的自动生成ID

问题描述 投票:0回答:2

不使用触发器在MySQL中创建带前缀的自动生成ID 我需要在 MySQL 中创建一个带前缀且不使用触发器的员工 ID。

sql mysql database mysql-workbench
2个回答
2
投票

要在 MySQL 中创建带有前缀的自动生成的员工 ID 而不使用触发器,您可以按照以下方法之一进行操作:

  1. 使用自动增量

您可以使用 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();
  1. 计算列

您可以创建一个结合了前缀和自动递增值的计算列。

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”替换为您想要的前缀。


0
投票

第一个范例对我来说看起来不错。对于第二个,我认为这不是 MySQL 的正确语法。

但是,要使用生成的列,您可以在两种机会之间进行选择:虚拟/存储。

MySQL:15.1.20.8 创建表和生成的列

我的理解是,该示例(使用上述示例,第 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)

到目前为止,这是一个非常简单的例子。为了进一步开发,我强烈建议检查(根据您的意图)数据类型和边界。

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