我正在尝试用't0000000'在mysql中创建自动递增的id,这可能吗?
答案 0 :(得分:4)
要实现目标,您可以使用触发器拦截插入并添加所需的前缀。
对于您的示例,表格如下:
CREATE TABLE table1_seq ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE table1 (id VARCHAR(7) NOT NULL PRIMARY KEY DEFAULT '0', name VARCHAR(30));
触发器可能是这样的:
DELIMITER $$
CREATE TRIGGER tg_table1_insert
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
INSERT INTO table1_seq VALUES (NULL);
SET NEW.id = CONCAT('t', LPAD(LAST_INSERT_ID(), 3, '0'));
END$$
DELIMITER ;
现在,当你插入
INSERT INTO Table1 (name) VALUES ('Jhon'), ('Mark');
你会有
| ID | NAME |
------------------
| LHPL001 | Jhon |
| LHPL002 | Mark |
答案 1 :(得分:1)
不幸的是AUTO_INCREMENT
只接受序列号。
您可以做的是使用固定长度为7的LPAD
在您的选择查询中添加此前缀,然后附加t
,如下所示:
SELECT CONCAT('t', LPAD(ID, 7, '0')) FROM ...
那将进行以下转换:
+--------+--------------------------------------+
| ID | SELECT CONCAT('t', LPAD(ID, 7, '0')) |
+--------+--------------------------------------+
| 0 | t0000000 |
| 1 | t0000001 |
| 15 | t0000015 |
| 197845 | t0197845 |
+--------+--------------------------------------+