我正在尝试将数据作为主要ID插入,该数据库在MySQL数据库中具有一个字母数字值和两个数值。此数据将自动递增生成数字,但字母数字值将固定。比如D1,D2 ...... D54,D55,D56等。这里,'D'总是相同,但数字会自动递增。有没有办法做到这一点?
答案 0 :(得分: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 (),(),();
你会得到
| ID | --------- | 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,从而导致插入失败。答案 1 :(得分:0)
我们无法为字母数字设置自动增量。在您的情况下,如果D始终相同,则无需将其添加到您的pk字段。将常量保持在单独的字段中,并在选择时添加它。