茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

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;
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)

【今日の積み上げ】

‐ データベースの基礎