Mysql
同時插入,有可能發生嗎?
晚上好。
我對是否包含在數據庫中存在疑問。一個常見的例子是使用者名必須是唯一的使用者帳戶。
在以下邏輯中:
- 使用者在表單中輸入數據。
- 數據通過 $_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)
.