【问题标题】:adding a kind of auto increment column to a mysql table将一种自动增量列添加到 mysql 表
【发布时间】:2021-03-21 23:26:00
【问题描述】:

我想在 mysql 表中添加一列,其单元格将获得如下值:

 newColumn
 -----------
 log-00001
 log-00002
 log-00003
 ....

值 log-0000x 将由 mysql 自动创建。这就像一个“自动递增”列,但带有“log-”前缀。这可能吗? 谢谢

【问题讨论】:

  • 只需使用自动增量,并在应用程序级别进行前缀。

标签: mysql sql auto-increment


【解决方案1】:

MySQL 不会自动递增除整数以外的任何内容。您不能自动增加字符串。

您不能使用触发器根据自动增量值填充字符串。原因是在“之前”触发器执行时尚未生成自动增量值,并且在“之后”触发器中更改列已经太晚了。

另见我对https://stackoverflow.com/a/26899091/20860的回复

您不能使用虚拟列,可能是出于同样的原因。

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 |
+-------+-----------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2019-01-18
    • 2011-12-05
    • 2020-09-05
    • 2015-06-05
    • 2013-01-23
    相关资源
    最近更新 更多