テーブルに関してのコマンド
簡単に動作確認した限りではdescやselect文、insert文は
そのまま使用できそうな感じ。
使用頻度が高いもので追加があれば追記していく。
#テーブル一覧の表示
接続しているDBに作成されているテーブルの一覧を表示する。
SHOW TABLES;
DBに接続していないと以下エラーとなる。
MariaDB [(none)]> show tables;
ERROR 1046 (3D000): No database selected
#テーブルの作成
[]内は省略可能。
コメントについては後から追加することも可能だが、
作成時にやっておいた方が面倒がないと思う。
CREATE TABLE テーブル名(
カラム名 データ型 [COMMENT 'コメント'],
カラム名 データ型 [COMMENT 'コメント'],
・・・,
PRIMARY KEY (カラム名)
)
[CHARACTER SET 文字コード]
[COLLATE 照合順序];
#テーブル構造の確認
DESC テーブル名;
Collationやコメントなども含めた
descよりも詳細なテーブル構造の確認を行う場合。
SHOW FULL COLUMNS FROM テーブル名;
#コメントの追加
テーブルの作成時にコメントを付けることは可能だが、
後から追加することも可能。
但し、カラムコメントについてはカラムの再定義という形になるっぽい
ALTER TABLE テーブル名 COMMENT 'コメント';
ALTER TABLE テーブル名 MODIFY カラム名 COMMENT 'コメント';
SELECT column_name, column_comment FROM information_schema.columns
WHERE table_name='テーブル名';
#CREATE TABLE文の表示
指定したテーブル名のCreate Table文を表示する。
個人的にはテーブルの文字コードを確認したい時などに使う。
SHOW CREATE TABLE テーブル名;
#テーブルの一覧と詳細情報の確認
Collationとか作成日、最終更新日などの確認に使用。
カレント以外にもDBを指定して実行することも可能。
SHOW TABLE STATUS;
SHOW TABLE STATUS FROM データベース名;
like句で特定のテーブル、ある程度文字列を含んだテーブルを
絞り込むことも可能。
SHOW TABLE STATUS LIKE 'テーブル名';
SHOW TABLE STATUS FROM データベース名 LIKE 'テーブル名';
#カラムの追加
###テーブルの末尾に追加
ALTER TABLE テーブル名 ADD カラム名 カラムの型情報;
###位置を指定して追加
ALTER TABLE テーブル名 ADD カラム名 データ型 AFTER 入れたい位置の前のカラム名;
例:
fir_nameカラムとfam_nameカラムの間に"mid_name"というカラムを追加する場合
MariaDB [iwate]> desc juve;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id_no | int(11) | NO | | NULL | |
| no | varchar(5) | NO | | NULL | |
| fir_name | varchar(25) | YES | | NULL | |
| fam_name | varchar(25) | YES | | NULL | |
| position | varchar(3) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
MariaDB [iwate]> alter table juve add mid_name varchar(25) after fir_name;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [iwate]> desc juve;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id_no | int(11) | NO | | NULL | |
| no | varchar(5) | NO | | NULL | |
| fir_name | varchar(25) | YES | | NULL | |
| mid_name | varchar(25) | YES | | NULL | |
| fam_name | varchar(25) | YES | | NULL | |
| position | varchar(3) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
#テーブル名の変更
OracleDBと同様にalter文、rename文両方ともOKっぽい。
ALTER TABLE テーブル名 RENAME AS 新テーブル名;
RENAME TABLE テーブル名 TO 新テーブル名;
#データの挿入
[]内は省略可能。
insert文については特に変化はなし。
insert select文も使用可能。
但しOracleDBと違って「ON DUPLICATE KEY UPDATE」というオプションが存在。
これはOracleDBで言うところのmerge文的な位置付けの模様で、
対象データが無ければinsertしてあれば古いデータをupdateする、という動作。
INSERT INTO テーブル名 [カラム名, ...]
VALUES(値,'値', ...)
[ON DUPLICATE KEY UPDATE カラム名='値'];
#データの更新
[]内は省略可能。
update文についても特に変化はなしだが、
他のテーブルBの値でテーブルAの値をupdateする、
と言ったことを副問合せでなく、
複数テーブルを指定するだけで可能になっている。
UPDATE テーブル名[,テーブル名] SET カラム名=値 [,カラム名='値']
WHERE カラム名='値';
複数テーブルを指定するケースは複数テーブルで条件に当てはまる値を
いっぺんに更新できる、と勘違いしそうになる(実際に自分はそう認識してしまった)。
実行すればすぐに分かるけど、この文法だと直感的には分からない人の方が多いと思うんだけどなぁ・・・
自分だけかな?
#データの削除
delete文、truncate文両方ともそのまんまでいけそう
DELETE FROM テーブル名 [WHERE カラム名='値'];
TRUNCATE TABLE テーブル名;
このdeleteとtruncateの内部動作の差異はまだアーキテクチャを理解してないので
OracleDBと同じ理解でいいのかはまだ分からない。
#参考
MariaDB SQL Commands
https://mariadb.com/kb/en/mariadb/sql-commands/
MySQL5.6 リファレンスマニュアル
第 13 章 SQL ステートメントの構文
https://dev.mysql.com/doc/refman/5.6/ja/sql-syntax.html
MySQL: INSERT...ON DUPLICATE KEY UPDATEまとめ
http://qiita.com/yuzroz/items/f0eccf847b2ea42f885f
よく使うMariaDB か MySQLのSQLコマンドメモ
http://qiita.com/pugiemonn/items/247dccb6dc56e373ba92
MariaDB はじめてのMariaDB 【第5回 DBを作成してみよう】
http://www.sakc.jp/blog/archives/38550
バシャログ。
【MySQL】レコードを、別テーブルの特定の値で UPDATE する方法
http://bashalog.c-brains.jp/13/07/24-144156.php