在 PHP 中,使用 MySQL 事務時,可以通過以下方法設置隔離級別:
SHOW CREATE TABLE your_table_name;
如果輸出結果中包含 ENGINE=InnoDB
,則表示您的表使用了 InnoDB 存儲引擎。
使用 MySQLi:
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢查連接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 設置為讀未提交(READ UNCOMMITTED)
$conn->query("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
// 開始事務
$conn->begin_transaction();
try {
// 執行 SQL 查詢
$sql1 = "INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2')";
$sql2 = "UPDATE table2 SET column1 = 'value3' WHERE column2 = 'value4'";
if ($conn->query($sql1) === TRUE && $conn->query($sql2) === TRUE) {
// 如果兩個查詢都成功,則提交事務
$conn->commit();
echo "事務成功提交";
} else {
// 如果任一查詢失敗,則回滾事務
$conn->rollback();
echo "事務失敗,已回滾";
}
} catch (Exception $e) {
// 發生異常時回滾事務
$conn->rollback();
echo "事務失敗,已回滾: " . $e->getMessage();
}
// 關閉連接
$conn->close();
?>
使用 PDO:
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
try {
// 創建連接
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 設置 PDO 錯誤模式為異常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 設置為讀未提交(READ UNCOMMITTED)
$conn->exec("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
// 開始事務
$conn->beginTransaction();
// 執行 SQL 查詢
$sql1 = "INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2')";
$sql2 = "UPDATE table2 SET column1 = 'value3' WHERE column2 = 'value4'";
$conn->exec($sql1);
$conn->exec($sql2);
// 如果兩個查詢都成功,則提交事務
$conn->commit();
echo "事務成功提交";
} catch (PDOException $e) {
// 發生異常時回滾事務
$conn->rollback();
echo "事務失敗,已回滾: " . $e->getMessage();
}
// 關閉連接
$conn = null;
?>
在以上示例中,我們將事務隔離級別設置為 READ UNCOMMITTED
。您可以根據需要更改為其他隔離級別,例如 READ COMMITTED
、REPEATABLE READ
或 SERIALIZABLE
。請注意,不同的隔離級別可能會導致不同的并發問題,因此請根據您的應用程序需求選擇合適的隔離級別。