111日目:データベース
データベースの講義10日目です。
【講義内容】
- 第9章 バックアップとリカバリ-障害に備える仕組み-
【ワンポイント】
プロシジャ
DELIMITER | CREATE PROCEDURE insfor(v_max INT) BEGIN DECLARE vid INT DEFAULT 0; REPEAT SET vid = vid + 1; INSERT INTO t1 VALUES(); IF (mod(vid, 10000) = 0) THEN COMMIT; END IF; UNTIL vid >= v_max END REPEAT; END | DELIMITER ; SET autocommit = 0; CALL insfor(20000); DROP PROCEDURE insfor;
データ削除
- 高速、ロールバック不可
- テーブルを削除して、同じ定義でテーブル再作成
TRUNCATE TABLE t1
動作確認
CREATE TABLE t1 ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT )ENGINE=Innodb, DEFAULT CHARSET=utf8; INSERT INTO t1 VALUES(); SELECT * FROM t1; START TRANSACTION; TRUNCATE TABLE t1; SELECT * FROM t1; ROLLBACK; SELECT * FROM t1;
- 低速、ロールバック可
- データを1行ずつ削除
DELETE TABLE t1
動作確認
DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT )ENGINE=Innodb, DEFAULT CHARSET=utf8; INSERT INTO t1 VALUES(); SELECT * FROM t1; START TRANSACTION; DELETE FROM t1; SELECT * FROM t1; ROLLBACK; SELECT * FROM t1;
測定結果(データ件数:20万件)
mysql> CALL insfor(200000); Query OK, 0 rows affected (33.01 sec) mysql> TRUNCATE TABLE t1; Query OK, 0 rows affected (0.10 sec) mysql> CALL insfor(200000); Query OK, 0 rows affected (31.80 sec) mysql> DELETE FROM t1; Query OK, 200000 rows affected (5.64 sec)
【今日の積み上げ】
‐ データベースの基礎