我想在我的mySQL數據庫中存儲一對多的關係,並且我想盡可能避免重複的條目。簡單的重複密鑰更新?
我在網上閱讀並看到'ON DUPLICATE KEY UPDATE'是一個選項。這是否適合我的情況?
CODE:
function insert_options($uid, $array) {
if(!is_array($array)) {
return false;
}
$db = db_connect();
foreach($array as $a) {
$sql = 'INSERT INTO newsletter_coupon_codes_options (uid, option_name, value) VALUES (?, ?, ?)';
$stmt = $db->prepare($sql);
if($stmt === false) {
echo "Prepare failed: (" . $db->errno . ") " . $db->error;
}
$stmt->bind_param('iss', $uid, $a, $value);
$value = '1';
$stmt->execute();
}
}
表
UID(INT11), OPTION_NAME(varchar(255)), VALUE(INT(11))
我嘗試添加ON DUPLICATE KEY UPDATE value = 1
到$sql
聲明,但它似乎沒有做任何事情。基本上我想確保當我插入數據時,如果存在uid
和option_name
,它只是將value
設置爲1
,並且不會創建新條目。
我沒有設置唯一密鑰,只有uid
上的主密鑰。我不知道做什麼獨特。我無法使uid
具有唯一性,因爲每個uid
將會有多個條目。我也不能使option_name
獨一無二,因爲將有多個相同的option_name uid
的
什麼是最好的方法來實現這一目標?
您是否在該表中添加了唯一密鑰.. – Sundar
@Sundar> Nope。我只有一個「uid」的PK。我不知道做什麼獨特。我不能使'uid'唯一,因爲每個'uid'都會有多個條目。我也不能使'option_name'唯一,因爲對於多個'uid'將會有相同的'option_name'。你能推薦一些東西嗎? – tr3online
您應該使用唯一密鑰來更新條目。主鍵查找速度更快,因此您可以在決定插入或更新後首先檢查重複檢查過程。但主鍵也支持重複更新http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – Sundar