MySQL 是一款強大的關系型數據庫管理系統,它支持高并發的操作。在實際應用中,我們經常需要并發地向不同的數據表中插入數據。下面我將介紹如何實現 MySQL 并發插入到不同表數據。
// 假設有兩個數據表,一個是 user 表,一個是 order 表 // user 表結構如下 CREATE TABLE user ( id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(20) NOT NULL, age INT, PRIMARY KEY (id) ); // order 表結構如下 CREATE TABLE order ( id INT UNSIGNED AUTO_INCREMENT, user_id INT UNSIGNED, order_no VARCHAR(20) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE );
首先,我們需要創建多個 MySQL 連接,以便同時向不同的數據表中插入數據。我們可以使用mysqli
擴展來實現。
// 連接到 MySQL 數據庫 $conn1 = mysqli_connect("localhost", "user1", "password1", "database1"); $conn2 = mysqli_connect("localhost", "user2", "password2", "database2");
接下來,我們需要編寫并發插入數據的代碼。以下是一個示例代碼:
// 用戶數據 $user_data = [ ['John', 28], ['Jack', 32], ['Mary', 25] ]; // 訂單數據 $order_data = [ [1, '20210101'], [2, '20210102'], [3, '20210103'] ]; // 并發插入用戶數據到 user 表 $conn1->autocommit(FALSE); foreach ($user_data as $data) { $query = "INSERT INTO user (name, age) VALUES ('$data[0]', $data[1])"; $conn1->query($query); } $conn1->commit(); // 并發插入訂單數據到 order 表 $conn2->autocommit(FALSE); foreach ($order_data as $data) { $query = "INSERT INTO order (user_id, order_no) VALUES ($data[0], '$data[1]')"; $conn2->query($query); } $conn2->commit();
在上面的示例代碼中,我們使用了autocommit(FALSE)
來關閉自動提交功能。這樣可以確保并發插入數據時,所有數據都插入成功后,再一次性提交。如果不關閉自動提交功能,可能會導致數據插入不完整。
同時,我們使用了mysqli
擴展提供的commit()
方法來提交數據。如果需要回滾操作,可以使用rollback()
方法。
總而言之,MySQL 并發插入到不同表數據,需要創建多個 MySQL 連接,并使用autocommit(FALSE)
來關閉自動提交功能,確保所有數據都插入成功后,再一次性提交。
上一篇mysql并發同一跟蹤號
下一篇css現代框架