向 mysql table 添加一种自动递增列
adding a kind of auto increment column to a mysql table
我想向 mysql table 添加一列,其中的单元格将获得如下值:
newColumn
-----------
log-00001
log-00002
log-00003
....
值 log-0000x 将由 mysql 自动创建。这类似于 "auto incremented" 列,但带有 'log-' 前缀。这可能吗?
谢谢
MySQL 不会自动递增整数以外的任何值。您不能自动递增字符串。
您不能使用触发器根据自动增量值填充字符串。原因是 "before" 触发器执行时尚未生成自动增量值,并且更改 "after" 触发器中的列为时已晚。
另请参阅我对
的回答
您不能使用虚拟列,可能出于同样的原因。
mysql> create table t (id int(5) zerofill auto_increment primary key,
virtcolumn char(8) as (concat('log-', id)));
ERROR 3109 (HY000): Generated column 'virtcolumn' cannot refer to auto-increment column.
您必须让整数自动递增,然后在插入完成后使用 UPDATE 填充您的 "log-nnnnnn" 字符串。
CREATE TABLE `t` (
`id` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
`log` char(9) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `t` () VALUES ();
UPDATE `t` SET `log` = CONCAT('log-', `id`) WHERE `id` = LAST_INSERT_ID();
SELECT * FROM `t`;
+-------+-----------+
| id | log |
+-------+-----------+
| 00001 | log-00001 |
+-------+-----------+
我想向 mysql table 添加一列,其中的单元格将获得如下值:
newColumn
-----------
log-00001
log-00002
log-00003
....
值 log-0000x 将由 mysql 自动创建。这类似于 "auto incremented" 列,但带有 'log-' 前缀。这可能吗? 谢谢
MySQL 不会自动递增整数以外的任何值。您不能自动递增字符串。
您不能使用触发器根据自动增量值填充字符串。原因是 "before" 触发器执行时尚未生成自动增量值,并且更改 "after" 触发器中的列为时已晚。
另请参阅我对
的回答您不能使用虚拟列,可能出于同样的原因。
mysql> create table t (id int(5) zerofill auto_increment primary key,
virtcolumn char(8) as (concat('log-', id)));
ERROR 3109 (HY000): Generated column 'virtcolumn' cannot refer to auto-increment column.
您必须让整数自动递增,然后在插入完成后使用 UPDATE 填充您的 "log-nnnnnn" 字符串。
CREATE TABLE `t` (
`id` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
`log` char(9) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `t` () VALUES ();
UPDATE `t` SET `log` = CONCAT('log-', `id`) WHERE `id` = LAST_INSERT_ID();
SELECT * FROM `t`;
+-------+-----------+
| id | log |
+-------+-----------+
| 00001 | log-00001 |
+-------+-----------+