表中有id、name、employee\u id等字段。id列是具有自动递增功能的主键。在这个表中,
我需要一个叫 employee_id
从…开始 A5001, A5002, A5003...and soon
.
我试过下面的代码。
table
CREATE TABLE table1_seq
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE table1
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30),
employee_id VARCHAR(30) NOT NULL DEFAULT '0'
);
现在扳机
DELIMITER $$
CREATE TRIGGER tg_table1_insert
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
INSERT INTO table1_seq VALUES (NULL);
SET NEW.employee_id = CONCAT('A', LPAD(LAST_INSERT_ID(), 4, '500'));
END$$
DELIMITER ;
然后在表1中插入行
INSERT INTO Table1 (name)
VALUES ('ABC'),('ZXD'),('POI');
最后,我得到了我的输出。
1|ABC | A5001
2|ZXD | A5002
3|POI | A5003
等等
现在我的问题是,我在表中插入了1000行,所以我的id是1000,但是我的雇员id有一些问题,因为在得到a5999之后,它从1000开始,这是完全错误的,我需要继续这样做 A6000, A6001, A6002.. and so on
我想我的扳机有点问题。
你能帮我解决这个问题吗?
1条答案
按热度按时间x8goxv8g1#
可以使用数学加法代替字符串填充:
说明:我只是在最后一个insert id上加了5000。想想看:
第一个id为5000+1=5001
第9999个id是5000+999=5999
第1000个id为5000+1000=6000
它永远不会抛出一个短于4位数字的id,因此不需要
LPAD
.警告:第4999次插入后,您必须思考您想要什么。它将导致一个5位数的id(5000+5000=10000)。如果你对5位数没有问题,就这样吧。