创建自动增量与前文

问题描述:

我有使用MySQL,我想在视图表中创建自动递增我的项目的麻烦,我创建sintax像这样的:创建自动增量与前文

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

为什么,如果我在第一个加语法线像这样的:

CREATE VIEW `TEST VIEW` as 

我有一些错误:

enter image description here

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

+0

为什么我已经投票? –

+0

不要担心downvotes。当人们通过阅读错误信息提出看起来可能会有问题的问题时,人们通常会收到这些问题。 –

如果您使用的是Oracle,则可以使用名为sequence的对象来达到此目的。但是,谁拥有Oracle许可证的资金?

如果你需要一系列的数字和您使用的MariaDB的叉子,你可以做

 SELECT seq FROM seq_0_to_99 

或一些这样的使用顺序引擎的。

如果你需要MySQL中的持续序列号,这是一个解决方法。这是一个杂牌组装电脑:如果你创建下表:

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; 

第三个查询是保证返回一个唯一的序列号。即使您有数十个不同的客户端程序连接到您的数据库,这种担保仍然有效。 (DELETE查询只会使这个没有意义的表占用太多空间。)

您收到的错误消息说明您无法在视图中使用会话变量。

+0

好的导师!谢谢! –

+0

和为什么我downvote,我错了queston或其他? –

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

视图定义受到以下限制:

  • SELECT语句不能引用系统变量或用户定义的变量。

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

听起来好像你想为查询结果创建一个行号,而不是自动增量列存储在表中。

MySQL 8.0.2增加了窗口函数ROW_NUMBER(),但是8.0版仍在开发中,因为我们正在编写这个功能。也许在2018年它将以GA的身份完成并发布。

+0

哇,好消息,但太高版本,如果我使用这个,谢谢@ bill karwin –