バッククォート付き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文を生成する必要がある場合。