関連記事
INSERT
- 基本の形
INSERT INTO テーブル名 (列1, 列2, ..) VALUES (値1, 値2, ..);
-- 文字型、日付型はシングルクォーテーションで囲むことを忘れない
-- '2021-01-01'
列リスト、値リストの個数に過不足があるとエラーになる。
INSERT文は、基本的に1回で1行を挿入
- 複数行INSERT
INSERT INTO テーブル名
VALUES (値1, ..), (値1, ..), (値1, ..);
-- 不正なデータが含まれてエラーになった際、エラー箇所が分かりにくい
-- 全てのRDBMSで利用できない(Oracleが✖️)
- 列リスト省略
INSERT INTO テーブル名 VALUES (値1, ..);
-- 全列に対して、順番に割り当てる
- デフォルト値を設定(テーブル作成時にDEFAULT制約を追加している前提で)
INSERT INTO テーブル名 (列1, 列2(DEFAULT制約あり), ..) VALUES (値1, DEFAULT, ..);
他のテーブルからデータをコピー
-- テーブル1のデータをコピーテーブルへ
INSERT INTO コピーテーブル (列1, ..)
SELECT (列1, ..)
FROM テーブル1;
- データのバックアップを取るときに使える
- WHERE, GROUP BYを使用して、見やすいテーブルを別で用意する際に使える。(INSERT文内のSELECT文で、WHERE, GROUP BYなど使用可能)
DELETE
- DROP TABLE : テーブルそのものを削除
- DELETE : テーブルは残して、中のデータを全て削除
基本の形
DELETE FROM テーブル名;
-- 削除対象がレコード(行)のため、FROMを省略しないように
-- 反対に、一部の列のみ削除もできないため、列名を記述しないように(* もエラーになる)
- 探索型DELETE
全行ではなく、一部の行だけ削除
DELETE FROM テーブル名
WHERE 条件;
-- SELECT文と違い、GROUP BY, HAVING, ORDER BY の3つは指定できず、使えるのはWHEREのみ
-- そもそもデータ削除時に使用する状況がない
UPDATE
- 基本の形
UPDATE テーブル名 SET 列名 = 式 ;
- 探索型UPDATE
UPDATE テーブル名
SET 列名 = 式
WHERE 条件;
- NULLクリア
列をNULLで更新することをNULLクリア
という
式にNULLを記述する
- 複数行UPDATE
UPDATE テーブル名
SET 列1 = 式1,
列2 = 式2
WHERE 条件;
トランザクション
- 更新処理のひとまとまりのこと
- DBでのデータ更新処理の確定(COMMIT) / 取り消し(ROLLBACK)の管理が可能
-
ACID特性を持つ
- 原子性:Atomicity
- 全て実行されるか、全て実行されない状態で終わることを保証する
- 中途半端な更新で終わると、辻褄が合わなくなる。
- 一貫性(整合性):Consistency
- トランザクション内の処理も、DBの設定、制約を守る性質
- 独立性:Isolation
- トランザクション同士が互いに干渉しない、入れ子にならないこと
- 永続性(耐久性):Durability
- トランザクションが終了時点でのデータの状態が保存されることの保証
- トランザクションの実行記録をログとして残しておき、障害が起きた際は、ログを使って復旧する
- 原子性:Atomicity
基本の形
BEGIN TRANSACTION; -- PostgreSQL, SQL Server
-- START TRANSACTION; : MySQL
UPDATE ...
SET ...
.
.
.
COMMIT; -- or ROLLBACK;
ワンセットで行われるべき更新をは、トランザクションしてひとまとめにする
ROLLBACK
すると、DBの状態はトランザクションを開始する前の状態に戻る
大抵の場合、DBへ接続した時点で、暗黙的にトランザクションが開始されている。
参考
「SQL ゼロから始めるデータベース操作」