バッククォート付きMySQL Bulk INSERT

バッククォートで囲まれた識別子、TINYINT(1)ブーリアン、ON DUPLICATE KEY UPDATEをサポートするMySQL互換のBulk INSERT文を生成します。

Dialect Differences

詳細な説明

MySQL固有のBulk INSERT

MySQLには標準SQLとは異なる独自のダイアレクト規約があります。Bulk INSERTツールはMySQLダイアレクトを選択すると、完全にMySQL互換の出力を生成します。

MySQL識別子のクォート

MySQLはダブルクォートの代わりにバッククォートを使用します:

INSERT INTO \`users\` (\`id\`, \`first_name\`, \`email\`)
VALUES
  (1, 'Alice', 'alice@example.com'),
  (2, 'Bob', 'bob@example.com');

ブーリアンの処理

MySQLにはネイティブのBOOLEAN型がありません。ブーリアンはTINYINT(1)として格納されます:

JSON値 MySQL出力
true TRUE(1のエイリアス)
false FALSE(0のエイリアス)

CREATE TABLEを有効にすると、カラム型はBOOLEANではなくTINYINT(1)になります。

ON DUPLICATE KEY UPDATE

MySQLのUpsert構文はPostgreSQLと異なります:

INSERT INTO \`users\` (\`id\`, \`name\`, \`email\`)
VALUES
  (1, 'Alice Updated', 'alice.new@example.com'),
  (2, 'Bob Updated', 'bob.new@example.com')
ON DUPLICATE KEY UPDATE
  \`name\` = VALUES(\`name\`),
  \`email\` = VALUES(\`email\`);

INSERT IGNORE

重複をスキップして更新しない場合、MySQLはINSERT IGNOREを使用します:

INSERT IGNORE INTO \`users\` (\`id\`, \`name\`, \`email\`)
VALUES
  (1, 'Alice', 'alice@example.com');

max_allowed_packet

MySQLは単一のSQL文の合計サイズを制限しています。デフォルトは4MB(max_allowed_packet=4194304)です。大規模インポートの場合、この設定を増やすか、小さなバッチサイズを使用してください。

ユースケース

MySQL 8.0データベース向けのデータインポートパイプラインを構築しており、バッククォートによるクォートとON DUPLICATE KEY UPDATEを使用した冪等インポートのためのINSERT文を生成する必要がある場合。

試してみる — JSON to Bulk INSERT

フルツールを開く