Mysql

同時插入,有可能發生嗎?

  • April 18, 2016

晚上好。

我對是否包含在數據庫中存在疑問。一個常見的例子是使用者名必須是唯一的使用者帳戶。

在以下邏輯中:

  • 使用者在表單中輸入數據。
  • 數據通過 $_POST (或其他方法)收集
  • 保存數據前檢查使用者名是否已註冊
  • 如果沒有,則保存記錄,如果是,則通知使用者該使用者名已經存在。

例子:

<?php
$username = $_POST['username'];
$query = "SELECT * FROM `user_tbl` WHERE `username` = '{$username}'";
$result = mysql_query($query);
if ( mysql_num_rows ( $result ) > 1 ) {
   /* Username already exists */
   echo 'Username already exists';
} else {
   /* Username doesn't exist */
   /* a certain time is elapsed after checking */
   /* .. insert query */
}

我的問題是,在一個請求量很大的系統中,有可能在檢查使用者名是否已經存在和包含(如果使用者名不存在)之間,另一個使用者可以在同一時間執行相同的操作時間?

從理論上講,您最終可能會得到重複的使用者名。在高傳入請求的情況下,可能會發生競爭條件

如果您想避免這種情況,只需在您的列上放置一個UNIQUE 索引。您可以使用以下查詢在使用者名上創建唯一索引:

CREATE UNIQUE INDEX IDX_USERNAME ON `user_tbl` (`username`);

在創建此唯一索引之前,請確認您的表中沒有重複條目,因為索引創建會失敗。

當您在此欄位上有唯一索引時,將不可能出現重複的使用者名。當插入使用者名時,表在插入期間被鎖定,這保證不會發生競爭條件。

您可以UNIQUE(username).

引用自:https://dba.stackexchange.com/questions/134195