我使用mysql的项目有问题,我想在视图表中创建自动增量,我创建像这样的sintax:
SELECT
concat(@AI:= @AI + 1,`code`)
FROM
`TEST TABLE`, (SELECT @AI:=0) as `AI`
为什么我在第一行添加语法,如下所示:
CREATE VIEW `TEST VIEW` as
我有一些错误:
如何修复它或其他方法?谢谢你的进步!
答案 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完成并发布。