使用前置文本在 MySQL 中创建自动增量

create autoincrement in MySQL with pre text

我的项目在使用 mysql 时遇到问题,我想在视图 table 中创建自动增量,我创建了这样的语法:

SELECT 
    concat(@AI:= @AI + 1,`code`)
FROM 
    `TEST TABLE`, (SELECT @AI:=0) as `AI`

为什么我要像这样在第一行添加语法:

CREATE VIEW `TEST VIEW` as

我有一些错误:

如何修复它,或其他解决方法?。感谢您的提前!

如果您使用的是 Oracle,您会为此使用一个名为 sequence 的对象。但是,谁有钱购买 Oracle 许可证?

如果您需要一系列数字并且您使用的是 MariaDB 分支,则可以执行

     SELECT seq FROM seq_0_to_99 

或 SEQUENCE 引擎的一些此类使用。

如果您需要 MySQL 中的永久序列号,这里有一个解决方法。这是一个拼凑:如果您创建以下 table:

 CREATE TABLE sequence (                                       /*MySQL*/
     sequence_id BIGINT NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (`sequence_id`)
 ) 

然后依次发出这三个查询:

INSERT INTO sequence () VALUES ();                            /*MySQL*/
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;

第三个查询保证return一个唯一的序列号。即使您有许多不同的客户端程序连接到您的数据库,此保证仍然有效。 (DELETE 查询只是让这个毫无意义的 table 不会占用太多 space。)

您收到的错误消息清楚地表明您不能在视图中使用会话变量。

https://dev.mysql.com/doc/refman/5.7/en/create-view.html 说:

A view definition is subject to the following restrictions:

  • The SELECT statement cannot refer to system variables or user-defined variables.

您无法为您的查询创建视图。您必须直接执行查询。我能提出的唯一其他建议是为查询开发一个存储过程。

听起来您想为查询结果创建一个行号,而不是要存储在table中的自动递增列。

MySQL 8.0.2 添加了 window 功能 ROW_NUMBER(),但在我们撰写本文时,8.0 仍在开发中。也许在2018年它会完成并作为GA发布。