SQL 解説~ バイナリログ、トランザクション SET sql_log_bin = 0; セッション内でバイナリログ出力を抑止 SET session autocommit = [0|1]; セッション内でトランザクション有効 / 無効
18.
SQL 解説~ テーブル作成 CREATE TABLE t2 LIKE t1; primary key, index 含めた t1 テーブルと同じスキーマを作成 CREATE TABLE t2 (id int) AS (SELECT hoge FROM t1 LIMIT 0); カラムの型のみ 同じスキーマを作成
19.
SQL 解説~ トリガ AFTER INSERT CREATE TRIGGER insert_trigger AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 (dml_type, id, hoge) VALUES (1, NEW.id, NEW.hoge); t1 テーブルへの insert 後に起動 NEW 変数で t1 テーブルへの insert 後の値を参照 t2 テーブルへ dml_type, id, hoge を insert
20.
SQL 解説~ トリガ AFTER DELETE CREATE TRIGGER delete_trigger AFTER DELETE ON t1 FOR EACH ROW INSERT INTO t2 (dml_type, id) VALUES (2, OLD.id); t1 テーブルへの delete 後に起動 OLD 変数で t1 テーブルへの delete 前の値を参照 t2 テーブルへ dml_type, id を insert
21.
SQL 解説~ トリガ AFTER UPDATE CREATE TRIGGER update_trigger AFTER UPDATE ON t1 FOR EACH ROW IF (NEW.id=OLD.id) THEN INSERT INTO t2 (dml_type, id, hoge) VALUES (3, NEW.id, NEW.hoge); ELSE INSERT INTO t2 (dml_type, id, hoge) VALUES (2, OLD.id, OLD.hoge), (1, NEW.id, NEW.hoge); END IF t1 テーブルへの update 後に起動 NEW.id=OLD.id なら t2 テーブルへ 1 件 insert NEW.id!=OLD.id なら t2 テーブルへ 2 件 insert
22.
SQL 解説~ ファイル出力 SELECT id, dml_type FROM t1 ORDER BY id INTO OUTFILE '/var/lib/mysql/test/t1_file'; テーブルデータをファイル出力する。
23.
SQL 解説~ ファイル入力 LOAD DATA INFILE '/var/lib/mysql/test/t1_file' INTO TABLE t1 (id, dml_type); 出力したファイルをテーブルに読み込む。
24.
SQL 解説~ テンポラリテーブル CREATE TEMPORARY TABLE t1 (id int, dml_type int); セッション内のメモリ上に一時テーブルを作成 他のセッションからは見えない。 メモリ上にあるので早い DROP TEMPORARY TABLE t1; 一時テーブルを削除
25.
SQL 解説~ ユーザ定義変数 SELECT @range_end := id, hoge FROM t1 ORDER BY id LIMIT 100; @range_end -> 100 SELECT @range_end INTO @range_start; @range_end -> 100, @range_start -> 100 SELECT @range_end := id, hoge FROM t1 WHERE (id > @range_start) ORDER BY id LIMIT 100; @range_end -> 200, @range_start -> 100 SELECT @range_end INTO @range_start; @range_end -> 200, @range_start -> 200 「 := 」を使うと参照と同時にユーザ定義変数を更新
26.
SQL 解説~ テーブルデータコピー INSERT INTO t2 (id, dml_type) SELECT id, dml_type FROM t1; t1 テーブルのデータを t2 テーブルに insert
27.
SQL 解説~ リネームテーブル RENAME TABLE old TO tmp, new to old; old テーブルを new テーブルに置き換える。 ロックされているテーブルがあると実行できない アクティブなトランザクションがあると実行できない 名前の変更途中でエラーになるとロールバックする