SQL構文(データ挿入・更新)

INSERT

新しい行を挿入する。

INTO

挿入対象のテーブルと列名指定。
テーブル名(列名,列名)という形式で指定する。

なお、列名はカンマ区切りで複数指定でき、
NotNullが指定されていなかったり、
またはAUTO_INCREMENT(自動連番挿入)が指定されている場合、
列名を省く事が可能。
省かれた列にはNullまたは連番が挿入される。

VALUES

挿入する中身を指定する。
INTO句で指定した列名の順番を守ったうえで、挿入する必要がある。

文字列リテラルの場合は、シングルクォートかダブルクォートで囲む必要がある。
DATETIMEなどの時間形式の場合は、書式を守ったうえで、
文字列リテラルとして挿入する。

例:「goods」テーブルに、
「えんぴつ4本セット」と「けしゴム」の名前と価格を挿入する場合

INSERT INTO goods(name,price)
VALUES ('えんぴつ4本セット',100),("けしゴム",60);

VALUES句には、丸カッコ1つにつき1行単位で挿入する内容を入力。
カンマ区切りでもう1つ丸カッコを増やせば、一度に複数行挿入できる。

※INTO句で列名を指定せずに、挿入する事も可能だが、
列の順番を配慮しなくてはならず、かつ全ての列の値を設定する必要があり、
なによりテーブルの設計自体が変わるとエラーが発生するため、
必ずINTO句で、列名を指定するようにしたほうがよい。

UPDATE

既存のデータを更新する。

例:「goods」テーブルの「name」が「定規」の価格を変更する

UPDATE sql_test.goods
SET price = 120
WHERE name = '定規'

SET句で変更するカラム名を指定し、
=の後に、代入する値を入力する。

WHERE句でカラム名を指定し、変更したい対象の条件を指定する。

また、一括で特定の価格を上げるというような操作も可能。

例:3つの商品の価格を20円上げたい場合

UPDATE sql_test.goods 
SET price = price + 20
WHERE name IN ('えんぴつ4本セット' , 'ノート', '消しゴム');

値上げしないといけないというのも、せちがらい世の中である。

SET句には、走査中の行の「price」列に、20を加算する式を代入。
WHERE句には、IN句を使い、更新対象の「name」の値を複数指定する。

今回は直感的にわかるように、商品の「名前」で指定しているが、
当然、同じ名前の商品も出てくる可能性もあるし、あまり正確ではない。
商品に一意のIDや主キーがあるのなら、そちらを指定の対象としたほうがいい。

DELETE

行を削除する。

WHEREで条件を指定しないと、テーブルの全ての行を削除してしまうので、要注意!

例:「id」が28の行を削除する

DELETE 
    FROM goods
    WHERE id = 28; -- 必ず指定するのだッ!!

TRUNCATE

指定したテーブル内の行全てを削除する。つまりカラッポにする。

行走査などを行わずに削除を行うため、
DELETE文ですべて消すよりも、動作が早い。
ただし、外部キーで参照されているテーブルには使えない。

例:テーブルをカラッポにします

TRUNCATE TABLE goods;

ちなみにテーブル名はカンマ区切りで複数指定可能。
「TABLE」句はDBエンジンによっては省略可能。