よく使う MySQL 文のまとめ
自分用のまとめ。
ちなみに MySQL をいじるには、Mycli が超便利です。
MySQL のオートコンプリート(コード補完)してくれます。
しかも、忘れがちな文末のセミコロンを書き忘れても問題なし!
これ無しじゃSQL操作はやってけない!
1.データベース作る
create database db_name;
2.テーブル作る
create table db_name.table_name (column_name カラム定義, column_name カラム定義);
※ カラム名 (column_name) は1つ以上指定する必要がある
もしくは……
use db_name;
で一度データベースにインしてから
create table table_name (column_name カラム定義, column_name カラム定義);
※ カラム名 (column_name) は1つ以上指定する必要がある
データベースにインする方法のがオススメ。
このあとのも、 use db_name; でインしたことを前提のコマンドを書いていきます。
3.テーブル一覧見る
show tables;
より詳細は、
show table status;
4.テーブル削除
drop table table_name;
5.カラム(データ種)の追加
alter table table_name add column_name カラム定義;
なお、column は日本語で「列」の意味。
6.カラムの変更
【名前変更】
alter table table_name change 現在のカラム名 新しいカラム名 カラム定義;
※ カラム定義のところは省いてOK
【削除】
alter table table_name drop column_name;
【カラムの定義だけ変更】
alter table table_name modify column_name カラム定義;
7.で、そのカラム定義ってどんなのあるの?
基本の形は「データの型 + オプション」
例えば ID カラムを持ったテーブル USERS を生成するのは、以下のようなコマンド。
create table users (id int unsigned primary key not null auto_increment);
これは int unsigned 型( 0 〜 4294967295 。unsigned int でなく int unsigned と書く点に注意 )で、
primary key(各データを識別するための鍵となるキーを保管するカラム、たいてい ID カラムがそれにあたる)、
not null(NULL値を格納することは出来ない)、
auto_increment(データを入れるときに、以前のIDを+1した値が入る)、
の3つのオプションを設定していることを意味します。
この USERS テーブルに admin もしくは editor という文字列を持つ、 role カラムを足すには以下のようにコマンド。
alter table users add role enum("admin", "editor") not null default "editor";
enum 型で、
not null、
default "editor"(何も値が指定されなかったときは、editor という文字列が入る)、
の2つのオプションが指定されたことになります。
文字列の場合、"ダブルクォーテーション" や 'シングルクォーテーション' で文字を囲む必要があります。
他には USERS テーブルにこういう値を設定したいことでしょう。
alter table users add user_name varchar(30) unique not null, profile text, created datetime;
user_name は varchar 型、varchar(30) で、30文字以内の文字列、
not null、unique(同じ値を入れてはいけない制限)のオプション、
profile は特に文字数制限のない text 型、
created は日時を入れる datetime 型という指定です。
数値型は int 以外にもいろいろあるので、ここ参照 : 数値型(データ型)のまとめ - [MySQL/SQL] ぺんたん info
ほかのデータ型についてはここにあるけど、char 型とか普通使わないものも書かれているので
混乱する可能性も… : MySQLのデータ型 - MySQLの使い方
8.カラム一覧見る
show columns from table_name;
9.データのセット
update table_name set column_name=値, column_name=値;
といった形。特定の行だけにデータをセットしたいなら、where 文を使って例えば
update users set role="admin" where id<=10;
これなら、id カラムの値が 10 以下のデータについて、role カラムの値を admin に設定するというふうになります。
update users set created=NOW() where created is null;
これは、created カラムが NULL のデータについて、NOW() メソッドを用いて、現在時刻をセットします。
update users set profile=NULL where user_name like "test%";
これは、test という文字列から始まる user_name を持つ USERS の profile に NULL 値をセットすることになります。
10.データ一覧見る
select * from table_name;
11.テーブルの複製
【データごと複製】
create table 新規作成するテーブル名 select * from コピー元のテーブル名;
【定義だけ複製】
create table 新規作成するテーブル名 like コピー元のテーブル名;
【同じテーブルを作るのに必要なSQL文を取得する】
show create table table_name;