LIMIT句とWHERE句でレコード数を絞り込む
mysqldumpでレコード数を制限する方法
方法
LIMIT句を使用する
mysqldump -u ユーザー名 -p パスワード データベース名 テーブル名 \
--limit=開始レコード数,抽出レコード数 > ダンプファイル名.sql
例:
mysqldump -u root -p mydb users --limit=10,5 > users.sql
この例では、mydb
データベースのusers
テーブルから、11番目から15番目のレコードまでの5件のレコードのみをusers.sql
というダンプファイルにダンプします。
WHERE句を使用する
特定の条件に合致するレコードのみをダンプしたい場合は、WHERE句を使用することができます。
mysqldump -u ユーザー名 -p パスワード データベース名 テーブル名 \
--where="条件式" > ダンプファイル名.sql
mysqldump -u root -p mydb users --where="age > 18" > users.sql
その他のオプション
- --skip-extended-insertオプションを使用すると、INSERTステートメントの拡張形式を省略することができます。これにより、ダンプファイルのサイズを小さくすることができます。
- --column-statisticsオプションを使用すると、各列の統計情報がダンプファイルに含まれます。
- --hex-blobオプションを使用すると、BLOB型データが16進文字列でダンプされます。
詳細は、mysqldumpのマニュアルページを参照してください。
-- 全てのレコードをダンプ
mysqldump -u root -p mydb users > users_all.sql
-- 11番目から15番目のレコードのみをダンプ
mysqldump -u root -p mydb users --limit=10,5 > users_limit.sql
-- 1番目から10番目のレコードのみをダンプ
mysqldump -u root -p mydb users --limit=0,10 > users_limit_0_10.sql
-- 年齢が18歳以上のレコードのみをダンプ
mysqldump -u root -p mydb users --where="age > 18" > users_age_gt_18.sql
-- 性別が男性のレコードのみをダンプ
mysqldump -u root -p mydb users --where="gender = 'male'" > users_gender_male.sql
-- 名前が"John"のレコードのみをダンプ
mysqldump -u root -p mydb users --where="name = 'John'" > users_name_John.sql
その他のオプション
-- 拡張形式を省略してダンプ
mysqldump -u root -p mydb users --skip-extended-insert > users_skip_extended_insert.sql
-- 各列の統計情報を含めてダンプ
mysqldump -u root -p mydb users --column-statistics > users_column_statistics.sql
-- BLOB型データを16進文字列でダンプ
mysqldump -u root -p mydb users --hex-blob > users_hex_blob.sql
※ 上記のコードはあくまでもサンプルです。必要に応じて修正してください。
他の方法
LIMIT句と同様に、OFFSET句を使用して、最初のN件のレコードをスキップしてレコードをダンプすることができます。
mysqldump -u ユーザー名 -p パスワード データベース名 テーブル名 \
--offset=開始レコード数 --limit=抽出レコード数 > ダンプファイル名.sql
mysqldump -u root -p mydb users --offset=10 --limit=5 > users.sql
PHPなどのスクリプトを使用する
mysqldumpコマンドを使用せずに、PHPなどのスクリプトを使用してデータベースからレコードを抽出することもできます。
<?php
$host = "localhost";
$user = "root";
$password = "password";
$database = "mydb";
$table = "users";
// MySQLデータベースに接続
$conn = new mysqli($host, $user, $password, $database);
// OFFSETとLIMITを使用してレコードを抽出
$sql = "SELECT * FROM $table ORDER BY id ASC LIMIT 10 OFFSET 10";
$result = $conn->query($sql);
// レコードをループ処理してダンプファイルに書き込む
while ($row = $result->fetch_assoc()) {
echo $row['id'] . "," . $row['name'] . "," . $row['age'] . "\n";
}
// 接続を閉じる
$conn->close();
?>
GUIツールを使用する
MySQL WorkbenchなどのGUIツールを使用して、データベースからレコードを抽出することもできます。
※ 上記の方法はいずれも、mysqldumpコマンドよりも複雑です。必要に応じて選択してください。
mysql