萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL INSERT 插入資料實務範例 (補充版)

補充 INSERT 實務常見模式:批次插入效能、避免重複、獲取自增 ID、大量資料載入。

批次插入效能優化

  • 單次 SQL 插入 500~1000 筆 (視 max_allowed_packet),避免過大封包。
  • 關閉自動提交 + 交易包裹:
$pdo->beginTransaction();
$stmt = $pdo->prepare('INSERT INTO logs (msg) VALUES (?)');
foreach ($logs as $log) {
    $stmt->execute([$log]);
    if (++$i % 500 === 0) $pdo->commit() && $pdo->beginTransaction();
}
$pdo->commit();

LOAD DATA INFILE:極速大量匯入

LOAD DATA INFILE '/path/file.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(name, email, created_at);
  • 需 FILE 權限、local_infile=1。
  • 比 INSERT 快 10~20 倍,適合初始化/遷移百萬列資料。

獲取自增 ID

$pdo->prepare('INSERT INTO users (name) VALUES (?)')->execute(['Tom']);
$id = $pdo->lastInsertId();  // PDO

$mysqli->query("INSERT INTO users (name) VALUES ('Tom')");
$id = $mysqli->insert_id;    // mysqli

避免重複插入策略

  1. 資料庫層:UNIQUE KEY + INSERT IGNORE / ON DUPLICATE KEY UPDATE。
  2. 應用層:先 SELECT 檢查 (有競態風險)、分散式鎖、冪等鍵 (如訂單號)。

常見錯誤

  • 字串值未加引號:VALUES (Tom) → 應為 VALUES ('Tom')。
  • 欄位數與值數不匹配。
  • 未關閉引號導致 SQL 注入風險 (務必用預處理)。
copyright © 萬盛學電腦網 all rights reserved