首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按information_schema自动递增

按information_schema自动递增
EN

Stack Overflow用户
提问于 2012-02-28 17:11:23
回答 2查看 1.1K关注 0票数 1

我有一张member桌子。我想使用自动增量来创建一个用户id。我已经尝试使用以下几种方法:

代码语言:javascript
复制
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一样显示为主键。

请帮帮我..如何做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-28 17:42:43

在插入触发器之前尝试此操作-

完整脚本:

代码语言:javascript
复制
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 ;

插入一些记录:

代码语言:javascript
复制
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');

检查结果:

代码语言:javascript
复制
SELECT * FROM member;

+---------+------+
| user_id | name |
+---------+------+
| jos001  | jos  |
| jos002  | jos  |
| jos003  | jos  |
| alex001 | alex |
| alex002 | alex |
| jos004  | jos  |
+---------+------+
票数 0
EN

Stack Overflow用户

发布于 2012-02-28 17:39:31

您正在执行您提供的查询中所示的更新/触发器。

更新将在插入之后工作。如果触发器在同一数据库上,则触发器将不起作用(因为它可能会以无限循环结束)

您应该做的是,在尝试插入之前,使用您使用的任何编程语言执行此操作。在执行插入操作时,准备好要插入的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9479134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档