我有一张桌子member
。我想使用自动增量来创建用户ID。
我尝试过使用以下内容:
SET new.user_id = CONCAT(new.name, LPAD((SELECT AUTO_INCREMENT FROM
information_schema.TABLES WHERE
TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member'),3,'0'));
但是当我插入一个新成员时,我收到一条错误消息user_id cannot be null
并且没有添加数据。我希望用户ID将显示为jos001
作为主键。
请帮助我..如何实现?
答案 0 :(得分:0)
您正在执行您提供的查询中显示的UPDATE / TRIGGER。
INSERT后更新将起作用。如果TRIGGER位于同一个数据库中(因为它可能会以无限循环结束),它将无法工作。
您应该做的是,在尝试插入之前,使用您使用的任何编程语言。进行插入时,请准备插入名称。
答案 1 :(得分:0)
尝试这个BEFORE INSERT触发器 -
完整脚本:
CREATE TABLE member(
user_id VARCHAR(23) NOT NULL,
name VARCHAR(20) DEFAULT NULL
);
DELIMITER $$
CREATE TRIGGER trigger1
BEFORE INSERT
ON member
FOR EACH ROW
BEGIN
-- Find next id for new user - MAX+1
SELECT MAX(CAST(SUBSTRING(user_id, LENGTH(user_id) - 2, 3) AS SIGNED)) + 1 INTO @next_id
FROM member WHERE SUBSTRING(user_id, 1, LENGTH(user_id) - 3) = NEW.name;
SET NEW.user_id = CONCAT(NEW.name, LPAD(IFNULL(@next_id, 1), 3,'0'));
END$$
DELIMITER ;
插入一些记录:
INSERT INTO member VALUES('', 'jos');
INSERT INTO member VALUES('', 'jos');
INSERT INTO member VALUES('', 'jos');
INSERT INTO member VALUES('', 'alex');
INSERT INTO member VALUES('', 'alex');
INSERT INTO member VALUES('', 'jos');
检查结果:
SELECT * FROM member;
+---------+------+
| user_id | name |
+---------+------+
| jos001 | jos |
| jos002 | jos |
| jos003 | jos |
| alex001 | alex |
| alex002 | alex |
| jos004 | jos |
+---------+------+