首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP MySQL INSERT INTO 完整指南:語法變體、批次新增與實戰範例

     編輯:MySQL 資料庫相關知識

INSERT INTO 核心語法

基本插入(指定所有欄位)

INSERT INTO table_name VALUES (value1, value2, ...);

指定欄位插入(推薦,順序可調整)

INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

進階插入技巧

單語句多筆資料批次插入(效能最佳)

INSERT INTO `news` (title, body, time) 
VALUES 
    ('title 1', 'body 1', NOW()),
    ('title 2', 'body 2', NOW()),
    ('title 3', 'body 3', NOW());

優勢:單次網路往返、單次解析優化、事務原子性,大幅優於循環單筆插入。

INSERT ... SELECT 跨表複製

INSERT INTO news_one (id, title, body, time)
SELECT id, title, body, time FROM news_two;

注意:兩表結構需相容(欄位數、型別、順序),欄位名稱可不同。

PHP 實戰範例(使用 mysqli 預處理)

<?php
$mysqli = new mysqli("localhost", "user", "password", "my_db");
if ($mysqli->connect_errno) {
    die("連線失敗: " . $mysqli->connect_error);
}

// 預處理語句(防 SQL 注入、效能更好)
$stmt = $mysqli->prepare("INSERT INTO Persons (FirstName, LastName, Age) VALUES (?, ?, ?)");
$stmt->bind_param("ssi", $firstName, $lastName, $age);

// 批次插入範例
$data = [
    ['John', 'Doe', 30],
    ['Jane', 'Smith', 25],
    ['Bob', 'Johnson', 35]
];

$mysqli->begin_transaction();
try {
    foreach ($data as $row) {
        [$firstName, $lastName, $age] = $row;
        $stmt->execute();
    }
    $mysqli->commit();
    echo count($data) . " 筆資料新增成功";
} catch (Exception $e) {
    $mysqli->rollback();
    echo "新增失敗: " . $e->getMessage();
}
$stmt->close();
$mysqli->close();
?>

常見陷阱與解決方案

問題原因解決方法
中文亂碼連線/資料庫編碼不一致執行 SET NAMES utf8mb4、確保資料庫 CHARSET=utf8mb4
主鍵衝突AUTO_INCREMENT 重複或手動指定 ID檢查主鍵策略、使用 INSERT IGNORE 或 ON DUPLICATE KEY UPDATE
大量插入超時單次事務過大、鎖等待分批提交(每 500-1000 筆)、調整 max_allowed_packet
特殊字元截斷未轉義單引號等字元務必使用預處理或 mysqli_real_escape_string()

效能優化建議

  • 關閉自動提交,手動控制事務邊界
  • 使用 LOAD DATA INFILE 處理超大量 CSV/TSV 匯入
  • 適當調大 bulk_insert_buffer_size(MyISAM)或 innodb_log_buffer_size(InnoDB)
  • 避免在觸發器/外鍵檢查重的表上大量插入,考慮暫時禁用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved