テストデータ作りたいな
- 自分で手で作るのもめんどいし、定義変わるとアレ(メンテが必要)やしな。
- せや、型から適当にデータ作るツールとかないんかな?
- あったわ→mysql_random_data_load
さすぺる!(さすがPercona!)
試してみよう
use test; -- 適当なテーブル作る CREATE TABLE `person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `guid` varchar(36) COLLATE utf8mb4_bin NOT NULL COMMENT 'GUID', `name` varchar(150) COLLATE utf8mb4_bin NOT NULL COMMENT '名前', `age` tinyint(4) NOT NULL DEFAULT '0' COMMENT '年齢', `money` int(11) DEFAULT NULL COMMENT '手持ちのお金', `marriage_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '結婚フラグ', `prefecture` varchar(30) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '住所(都道府県)', `tel_number` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '電話番号', `fax_number` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'FAX番号', `email` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'Eメールアドレス', `address` varchar(300) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '住所', `company` varchar(300) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '会社名', PRIMARY KEY (`id`), UNIQUE KEY `u_1` (`guid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='誰かさんの情報';
すぐ使いたいんで、precompiled binariesから取ってくる。
解凍して、mysql_random_data_loadを$PATHで見えるところに置いて、
$ which mysql_random_data_load /home/xxx/bin/mysql_random_data_load
ってな感じで見えるようになったんでOK。
使い方はhttps://github.com/Percona-Lab/mysql_random_data_loadに書いてある。
デバッグモードで100行くらい入れて試してみるか。
$ mysql_random_data_load test person 100 --debug --user=root --password=xxx --host=127.0.0.1 --port=3307
DEBU[2019-07-06T10:30:48+09:00] &tableparser.Table{
Schema: "test",
Name: "person",
Fields: {
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "id",
OrdinalPosition: 1,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "bigint",
CharacterMaximumLength: sql.NullInt64{},
CharacterOctetLength: sql.NullInt64{},
NumericPrecision: sql.NullInt64{Int64:19, Valid:true},
NumericScale: sql.NullInt64{Int64:0, Valid:true},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{},
CollationName: sql.NullString{},
ColumnType: "bigint(20)",
ColumnKey: "PRI",
Extra: "auto_increment",
Privileges: "select,insert,update,references",
ColumnComment: "ID",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "guid",
OrdinalPosition: 2,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:36, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:144, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(36)",
ColumnKey: "UNI",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "GUID",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "name",
OrdinalPosition: 3,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:150, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:600, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(150)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "名前",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "age",
OrdinalPosition: 4,
ColumnDefault: sql.NullString{String:"0", Valid:true},
IsNullable: false,
DataType: "tinyint",
CharacterMaximumLength: sql.NullInt64{},
CharacterOctetLength: sql.NullInt64{},
NumericPrecision: sql.NullInt64{Int64:3, Valid:true},
NumericScale: sql.NullInt64{Int64:0, Valid:true},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{},
CollationName: sql.NullString{},
ColumnType: "tinyint(4)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "年齢",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "money",
OrdinalPosition: 5,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "int",
CharacterMaximumLength: sql.NullInt64{},
CharacterOctetLength: sql.NullInt64{},
NumericPrecision: sql.NullInt64{Int64:10, Valid:true},
NumericScale: sql.NullInt64{Int64:0, Valid:true},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{},
CollationName: sql.NullString{},
ColumnType: "int(11)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "手持ちのお金",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "marriage_flag",
OrdinalPosition: 6,
ColumnDefault: sql.NullString{String:"0", Valid:true},
IsNullable: false,
DataType: "tinyint",
CharacterMaximumLength: sql.NullInt64{},
CharacterOctetLength: sql.NullInt64{},
NumericPrecision: sql.NullInt64{Int64:3, Valid:true},
NumericScale: sql.NullInt64{Int64:0, Valid:true},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{},
CollationName: sql.NullString{},
ColumnType: "tinyint(1)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "結婚フラグ",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "prefecture",
OrdinalPosition: 7,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:30, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:120, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(30)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "住所(都道府県)",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "tel_number",
OrdinalPosition: 8,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:20, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:80, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(20)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "電話番号",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "fax_number",
OrdinalPosition: 9,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:20, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:80, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(20)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "FAX番号",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "email",
OrdinalPosition: 10,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:255, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:1020, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(255)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "Eメールアドレス",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "address",
OrdinalPosition: 11,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:300, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:1200, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(300)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "住所",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
{
TableCatalog: "def",
TableSchema: "test",
TableName: "person",
ColumnName: "company",
OrdinalPosition: 12,
ColumnDefault: sql.NullString{},
IsNullable: false,
DataType: "varchar",
CharacterMaximumLength: sql.NullInt64{Int64:300, Valid:true},
CharacterOctetLength: sql.NullInt64{Int64:1200, Valid:true},
NumericPrecision: sql.NullInt64{},
NumericScale: sql.NullInt64{},
DatetimePrecision: sql.NullInt64{},
CharacterSetName: sql.NullString{String:"utf8mb4", Valid:true},
CollationName: sql.NullString{String:"utf8mb4_bin", Valid:true},
ColumnType: "varchar(300)",
ColumnKey: "",
Extra: "",
Privileges: "select,insert,update,references",
ColumnComment: "会社名",
GenerationExpression: "",
SetEnumVals: {},
Constraint: (*tableparser.Constraint)(nil),
SrsID: sql.NullString{},
},
},
Indexes: {
"u_1": {
Name: "u_1",
Fields: {"guid"},
Unique: true,
Visible: true,
},
"PRIMARY": {
Name: "PRIMARY",
Fields: {"id"},
Unique: true,
Visible: true,
},
},
Constraints: {
},
Triggers: {
},
conn: (*sql.DB)(nil),
}
INFO[2019-07-06T10:30:48+09:00] Starting
DEBU[2019-07-06T10:30:48+09:00] Must run 1 bulk inserts having 100 rows each
INFO[2019-07-06T10:30:49+09:00] 100 rows inserted
お、入ってる感じやな。どれどれ?
| id | guid | name | age | money | marriage_flag | prefecture | tel_number | fax_number | address | company | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | recusandae et consequatur eius aut a | consequatur nihil error eius ut. | 5 | 1342458479 | 6 | rerum unde qui perferendis nob | Terry Sanchez | Tammy Torres | eum culpa nam minima maxime. | et non nisi voluptas temporibus aliquam magnam. | eius deleniti nam et sint voluptates id. |
| 2 | aut odio soluta ut dolores. | omnis accusamus est voluptatem consequuntur quisquam quae quia. | 11 | 914091476 | 5 | fugiat magnam aut culpa ut rep | Janet Oliver | Juan King | nemo suscipit doloremque porro error et qui tenetur ut asperiores corporis! | nemo quia magnam hic dolor. | adipisci architecto animi vitae deleniti rerum. |
| 3 | aut dolor consequatur soluta exercit | perspiciatis sit odio fugit quasi non. | 3 | 1255569388 | 11 | ullam facere exercitationem il | Janet Murphy | Fred Grant | ut ea nisi recusandae quo inventore tenetur et. | et blanditiis maxime est quam quidem id. | illo ea voluptas vitae repudiandae architecto saepe. |
| 4 | quidem omnis iste ea a impedit odio | quod velit ut earum dolore molestiae! | 14 | 2003588754 | 12 | et qui et id voluptas voluptat | Tina Garrett I II II | Joe Edwards | quo explicabo eum qui alias sequi. | dolorem quaerat nihil aut perspiciatis qui asperiores nihil. | alias nisi ullam quo debitis iusto animi. |
| 5 | illo earum est pariatur aut in digni | consequatur molestias dicta omnis. | 4 | 1698116023 | 5 | doloribus natus distinctio nos | Brenda Hunt | Sean Carter | assumenda et deserunt quidem. | consequatur occaecati non libero accusantium reprehenderit quam suscipit. | ratione eum beatae laboriosam quo enim. |
| 6 | consequuntur quibusdam nihil soluta | accusamus similique cum eos quidem. | 8 | 1153628287 | 1 | voluptas est et temporibus aut | Paula Parker | Kathryn Watkins | quis voluptatem at perferendis labore. | reiciendis voluptates itaque voluptatem optio ea qui hic. | ab quibusdam illum. |
| 7 | voluptas animi vero tenetur adipisci | et ut et! | 5 | 1640670520 | 8 | quod corporis qui rerum culpa | Joshua Hart | Louise Fernandez | quia et molestiae distinctio quaerat quasi soluta aut voluptatem et recusandae! | doloribus dignissimos ut hic tempora. | temporibus eveniet vel quisquam repellendus aut animi fugit. |
| 8 | quae quod ratione pariatur repellend | suscipit omnis aut consequatur numquam laboriosam non repellendus. | 11 | 1218842385 | 7 | dolorem quia qui accusamus eni | Kenneth Burns | Terry Bryant | consequatur ex aliquam beatae qui et consequatur et. | vitae ratione quaerat rerum facilis. | animi sit ut nobis quae ea. |
| 9 | laudantium odit et facere minima. | ea quis voluptas ipsum dignissimos asperiores sequi aut. | 13 | 601894044 | 12 | id non consequuntur iste disti | Charles Anderson | Raymond Diaz | sequi impedit nihil ea vel et nihil rerum aut. | sit commodi et autem eius. | odit qui vitae facilis modi quia harum amet aspernatur. |
| 10 | magni ullam dignissimos praesentium | dicta qui sunt dolor ut repellat hic. | 10 | 1408984034 | 11 | quia tempora consequatur delec | Stephanie Garcia | Patricia Carroll | repudiandae fuga dignissimos odio voluptate quia. | quia necessitatibus molestiae dolorem natus accusantium. | sunt consectetur est amet doloremque qui autem quae. |
そりゃそうだよね・・・。
だって型で見てるだけなんだもん。
カラム名も見てくれるツール欲しい!
- 日本語で入ってほしいものもあるよね。
- コメントを参考にしたりしてほしいよね。
- MySQL8.0でも動いて欲しい(このツールはMySQL5.7までしか動かない)
自分で作るか、こいつをいじるかな〜
追記
を見るとわかりますが、型のフィールド値に制限が有ります。
decimal(25,0)
とかやると、
panic: invalid argument to Int63n
ってメッセージが出るのでご注意を!