2014年09月01日

MySQLが「TYPE=MyISAM」でエラーになる場合の対処法

■エラーの内容

MySQLでCREATE TABLEするときに、次のようなエラーが出ることがあります。
ERROR 1064 (42000): 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 'TYPE=InnoDB' at line 〜

MySQLのクエリが「TYPE=InnoDB」や「TYPE=MyISAM」のところでエラーになる場合は、その部分を

ENGINE=InnoDB

のように書き換えましょう。

この問題の原因は、MySQLのバージョンによりSQL構文が異なることにあります。

MySQL4系
TYPE=MyISAM
MySQL5.5〜
ENGINE=MyISAM

■よくあるケース
  • 4系以前のMySQLでエクスポートしたデータを、5系以降にインポートした場合
  • NucleusCMSのように、インストールスクリプトに4系の構文が用いられていて、5系の環境にインストールしようとするとテーブル作成に失敗する場合

SQLファイルが巨大な場合や、作成しようとしているテーブル数が非常に多い場合は「一括置換」を検討しましょう。

■その他の参考URL

このエントリーをはてなブックマークに追加
posted by taichistereo at 20:56 | Comment(0) | SQL

2010年07月09日

特定のカラムに連番をつけるSQL文

(この記事を書くときに使っていたRDBMSは、MySQL 5.1.41 です)


■ 連番をつけて抽出したいだけの場合
SET @i := 10000;
SELECT (@i := @i +1) as counter, rank FROM BTS_Entry WHERE priority=3;
この例では、「counter」という新しいカラムに10000からはじまる連番をつけながら、「BTS_Entry」テーブルの「priority」が3のレコードだけを抽出します。
(もちろん更新は行われません)



■ 特定のカラムを連番で埋めて更新
SET @i := 10000;
UPDATE BTS_Entry SET rank=(@i := @i +1) WHERE priority=3;
この例では、「BTS_Entry」テーブルの「priority」が3のレコードの「rank」カラムに10000から始まる連番をつけてテーブルを更新します。


以上!(・ω・)

このエントリーをはてなブックマークに追加
posted by taichistereo at 05:40 | Comment(0) | SQL
Blog Widget by LinkWithin