MySQL

 

MySQLでテーブルを簡単コピー

MySQLにはスキーマのコピーコマンド(DDL)が存在します。上手く活用し、履歴テーブル等のDDLを重複管理しないように工夫しましょう。非常によく使う機能なので是非使い方をマスターしましょう。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

スキーマのコピーは、履歴テーブルの生成でよく使うとおもいます。

まずは履歴テーブルを用意します。

mysql> create table log (id int unsigned not null auto_increment, create_date timestamp, primary key (id)) engine=innodb character set=utf8mb4;
Query OK, 0 rows affected (0.04 sec)

mysql> show create table log \G
*************************** 1. row ***************************
       Table: log
Create Table: CREATE TABLE `log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)

mysql> alter table log add key index_1(create_date);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

続いて、logテーブルをlikeでコピーします。

mysql> create table if not exists log_201205 like log;
Query OK, 0 rows affected (0.04 sec)

mysql> show create table log_201205\G
*************************** 1. row ***************************
       Table: log_201205
Create Table: CREATE TABLE `log_201205` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `index_1` (`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)

likeコマンドは非常に便利ですね。簡単にスキーマがコピーできました。

primary keyとB-Treeインデックスもコピーできています。auto_incrementの値は引き継がれません。

if not existsオプションを付ける事で、既にテーブルが存在している場合にエラーになる事を防ぎます。

これで、シェルスクリプトと組み合わせて毎月ログテーブルを増やす事も簡単ですね。

treeおすすめの書籍です!
【送料無料】実践ハイパフォ-マンスMySQL第2版

【送料無料】実践ハイパフォ-マンスMySQL第2版
価格:4,830円(税込、送料別)

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド
価格:3,465円(税込、送料別)

【送料無料】基礎からのMySQL改訂版

【送料無料】基礎からのMySQL改訂版
価格:3,129円(税込、送料別)

◯ 広告