この記事は、2015年「MySQLマニュアルを読む」アドベントカレンダーの10日目です.
RDBMSを使った開発を行っている最中に、もっともよく書いたり調べたりするのがSQL文でしょう。私自身もそうですが、たいがい、必要になったときにピンポイントで調べて、またすぐ忘れる、という事が多いです。
マニュアルには当然、各SQLの構文がしっかりと書かれていますから、機会あるときに一度、眺めてみると新たな発見があるかもしれません。普段使っているシンプルな構文以外にも、もっともっとたくさんのオプション句があることに、きっとびっくりすることでしょう。
SQLの構文については、13章 SQL Statement Syntax にまとまっています。
http://dev.mysql.com/doc/refman/5.7/en/sql-syntax.html
最低でも、DDL と DML は押さえておくと良さそうです。
ちょっとばかり、DDLの部分を眺めてみました。機能ごとに CREATE/ALTER/DROP が分かれているので並び替えてみると以下のようになります。
13.1.8 CREATE DATABASE 13.1.1 ALTER DATABASE 13.1.18 DROP DATABASE 13.1.9 CREATE EVENT 13.1.2 ALTER EVENT 13.1.19 DROP EVENT 13.1.10 CREATE FUNCTION 13.1.3 ALTER FUNCTION 13.1.20 DROP FUNCTION 13.1.11 CREATE INDEX 13.1.21 DROP INDEX 13.1.12 CREATE PROCEDURE 13.1.4 ALTER PROCEDURE 13.1.22 DROP PROCEDURE and CREATE FUNCTION and DROP FUNCTION 13.1.13 CREATE SERVER 13.1.5 ALTER SERVER 13.1.23 DROP SERVER 13.1.14 CREATE TABLE 13.1.6 ALTER TABLE 13.1.24 DROP TABLE 13.1.15 CREATE TABLESPACE 13.1.25 DROP TABLESPACE 13.1.16 CREATE TRIGGER 13.1.26 DROP TRIGGER 13.1.17 CREATE VIEW 13.1.7 ALTER VIEW 13.1.27 DROP VIEW 13.1.28 RENAME TABLE 13.1.29 TRUNCATE TABLE
面白いなぁと思うのは、
・INDEX 操作には ALTER がない
・PROCEDURE/FUNCTION の操作で、CREATE/DROP には PROCEDUREもFUNCTIONも指定できるのに、ALTERには PROCEDURE しかなさげ
・TABLESPACE/TRIGGERにも、ALTERはない。*1
・TABLE 操作には、RENAME だったり TRUNCATE だったりの命令もある。
余談ですが、TRUNCATEをDDLだと思っていない人に時々出会います。操作の目的としては「データを消したい」シーンで使うので、DELETEと同類というのは感覚としてわかります。
バージョンによって大きく変わる部分でもないので、読みやすい日本語マニュアルのほうを見てみましょう。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.33 TRUNCATE TABLE 構文
これを見ると、DROP権限が必要であること、ロールバックできないこと、トリガも起動されないことが書かれています。よく見ると、英語版(5.6、5.7とも)には、日本語版よりもう少し情報が加えられていますね。歴史上ちょっと問題を含む時期があったっぽい(よく読み取れない。誰か解説してください)。
*1:そういやそもそも私、TABLESPACEの考え方分かっていないから、このあたりも押さえておきたいですね