使用pre text在MySQL中创建自动增量

时间:2017-09-02 19:29:37

标签: mysql row-number sql-view

我使用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

如何修复它或其他方法?谢谢你的进步!

2 个答案:

答案 0 :(得分:2)

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

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

     SELECT seq FROM seq_0_to_99 

或使用SEQUENCE引擎。

如果你需要MySQL中的持久序列号,这是一个解决方法。这是一个kludge:如果您创建下表:

 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查询只是让这个没有意义的表占用太多空间。)

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

答案 1 :(得分:0)

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

  

视图定义受以下限制:

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

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

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

MySQL 8.0.2添加了窗口函数ROW_NUMBER(),但由于我们正在编写这个,因此仍在开发8.0。也许在2018年,它将作为GA完成并发布。