2017-09-02 68 views
-1

我有使用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。當人們通過閱讀錯誤信息提出看起來可能會有問題的問題時,人們通常會收到這些問題。 –

回答

2

如果您使用的是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或其他? –

0

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 –