2017-05-03 29 views
0

我正在使用maria db。當我嘗試使用在線ddl選項(lock = none,Algorithm = inplace)刪除索引時,出現語法錯誤。 DROP INDEX idx_new ON posts ALGORITHM = INPLACE LOCK = NONE; 錯誤1064(42000):您的SQL語法錯誤;檢查與你的MariaDB服務器版本相對應的手冊,在第1行的'ALGORITHM = INPLACE LOCK = NONE'附近使用正確的語法。mariadb在線丟棄索引不起作用

據我瞭解文檔,最新的mariadb應該能夠運行這些DDL線上。

我想這DDL:

DROP INDEX idx_new ON posts ALGORITHM=INPLACE LOCK=NONE; 

,以及那些:

DROP INDEX idx_new ON posts LOCK=NONE ALGORITHM=INPLACE; 
DROP INDEX idx_new ON posts LOCK=NONE; 

這裏的一些背景信息:

OS: macOS Sierra 10.12.3 

我的mysql安裝(我不記得版本),然後用mariadb替換它(卸載並通過brew安裝)。

> mysql --version 
mysql Ver 15.1 Distrib 10.2.5-MariaDB, for osx10.12 (x86_64) using readline 5.1 

奇怪的是:當我用我的SQL UI(續集專業版),它讓我在標題(MySQL的5.5.5 - 10.2.5-MariaDB的)。

難道還有一些來自MySQL 5.5.5的工件嗎?

MariaDB 10.2.5不能在線運行DROP INDEX嗎?

+0

你想要刪除索引,爲什麼要指定算法? –

+0

向我們展示整個'ALTER'語句。或許「算法」條款不在正確的位置。 –

+0

添加了ALTER語句 – Alex

回答

0

DROP INDEX中的語法錯誤是已知錯誤https://jira.mariadb.org/browse/MDEV-12572,語法不足。解決方法是通過一般ALTER語句來做到這一點:

ALTER TABLE posts DROP INDEX idx_new, ALGORITHM=INPLACE, LOCK=NONE; 

關於5.5.5前綴 - 它不是5.5文物的指示。前綴與10.x發行版本一起引入,以處理服務器和客戶端,而不是將10.x識別爲有效版本並拒絕與之通信(有關詳細信息,請參閱https://jira.mariadb.org/browse/MDEV-4088)。

MariaDB服務器和客戶端剝離了前綴,但第三方應用程序沒有。

+0

感謝您的回答。這是問題。我知道替代語法,但我沒有嘗試。 (我增強了RoR ActiveRecord遷移,以便始終使用在線DDL,所以我試圖堅持使用ActiveRecord :: Migration爲我生成的sql。但是沒關係,現在我可以轉換它,我知道發生了什麼。) – Alex