我有使用MySQL,我想在視圖表中創建自動遞增我的項目的麻煩,我創建sintax像這樣的:創建自動增量與前文
SELECT
concat(@AI:= @AI + 1,`code`)
FROM
`TEST TABLE`, (SELECT @AI:=0) as `AI`
爲什麼,如果我在第一個加語法線像這樣的:
CREATE VIEW `TEST VIEW` as
我有一些錯誤:
如何修復它,或者其他方法?感謝您的提前!
我有使用MySQL,我想在視圖表中創建自動遞增我的項目的麻煩,我創建sintax像這樣的:創建自動增量與前文
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
或一些這樣的使用順序引擎的。
如果你需要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查詢只會使這個沒有意義的表佔用太多空間。)
您收到的錯誤消息說明您無法在視圖中使用會話變量。
好的導師!謝謝! –
和爲什麼我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的身份完成併發布。
哇,好消息,但太高版本,如果我使用這個,謝謝@ bill karwin –
爲什麼我已經投票? –
不要擔心downvotes。當人們通過閱讀錯誤信息提出看起來可能會有問題的問題時,人們通常會收到這些問題。 –