使用前置文本在 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发布。
我的项目在使用 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发布。