我正在尝试在 MySQL 数据库中插入一个数据作为具有一个字母数字值和两个数值的主 ID。此数据将自动增量生成数字,但字母数字值将是固定的。比如,D1、D2....D54、D55、D56 等。这里,“D”总是相同的,但数字会自动增加。有没有办法做到这一点?
问问题
2738 次
2 回答
5
首先,不建议这样做,就像其他人评论的那样,您可以动态生成此 id 值。
但是,如果您仍然希望按照自己的方式进行操作,则至少有两种方法可以做到:
或多或少可靠的方法涉及使用单独的表进行排序和触发器
架构:
CREATE TABLE Table1_seq
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE Table1
(
`id` VARCHAR(10) NOT NULL PRIMARY KEY DEFAULT '',
...
);
扳机:
DELIMITER $$
CREATE TRIGGER tg_bi_table1
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
INSERT INTO table1_seq() VALUES();
SET NEW.id = CONCAT('D', LPAD(LAST_INSERT_ID(), 4,'0'));
END$$
DELIMITER ;
然后你只需将你的行插入到table1
INSERT INTO Table1 () VALUES (),(),();
你会得到
| 身份证 | --------- | D0001 | | D0002 | | D0003 |
这是SQLFiddle演示
不可靠的方法是在INSERT
语句本身中动态生成您的新 id
INSERT INTO Table1 (id, ...)
SELECT CONCAT('D', LPAD(COALESCE(SUBSTR(MAX(id), 2), 0) + 1, 4, '0')),
...
FROM table1
这是SQLFiddle演示
这种方法的问题:
- 在重负载下,两个并发会话可以获取相同的
MAX(id)
值,因此生成相同的新 id 导致插入失败。 - 您不能使用多插入语句
于 2013-08-23T15:15:58.853 回答
0
我们不能为字母数字设置自动增量。在您的情况下,如果 D 始终相同,则无需将其添加到您的 pk 字段中。将常量保存在单独的字段中,并在选择时添加。
于 2013-08-23T15:20:32.993 回答