2016-08-07 17 views
2

私はこのようなテーブルを変更しようとしています:alter tableの複数の変更カラムの構文エラー?

ALTER TABLE book 
    ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `id`, 
    CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT, 
    CHANGE COLUMN `author_id` bigint unsigned NOT NULL; 

しかし、それは、この構文エラー与え続けて:私は私が間違ってここに行くよ見当がつかない

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'bigint unsigned NOT NULL AUTO_INCREMENT, CHANGE COLUMN `author_id` bigint un' at line 3 

を。 SQLは右の私には非常にすべてのようだと、テーブルの変更のそれぞれが正常に個別に実行することができます。

ALTER TABLE book ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `id`; 
ALTER TABLE book CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT; 
ALTER TABLE book CHANGE COLUMN `author_id` bigint unsigned NOT NULL; 

私は、個々のバージョンを使用することができますが、私は変更する必要がかなり大きなテーブルがあるので、それが良いだろうより速くなければならない複合クエリを使用する場合

なぜSQLは機能しませんか?

答えて

1

問題がドキュメンテーションCHANGEで構文あたりのあなたの次のコード行の原因はCHANGE [COLUMN] old_col_name new_col_name column_definition

CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT, 

のような新しいカラム名を見込んでですから、

CHANGE COLUMN `id` `new_id` bigint unsigned NOT NULL AUTO_INCREMENT, 

(OR)の使用を検討し、これを変更することができますいずれかでありますMODIFYではなくむしろMODIFY [COLUMN] col_name column_definition

MODIFY [COLUMN] `id` bigint unsigned NOT NULL AUTO_INCREMENT 
+0

"これは標準SQLのMySQL拡張で、ALTER TABLEステートメントごとに各句の1つのみを許可します。たとえば、1つの文で複数の列を削除するには、次のようにします。 " - これは答えのようです。単一のalter tableクエリでは、1つのタイプの列変更だけが可能ですか? –

+0

@ kavoir.com、はい、/alter/drop/alter tableステートメントごとに削除して組み合わせることはできません。構文を正しく確認すると、それが表示されます。 – Rahul

+0

@ kavoir.com – Rahul

関連する問題