我想在我的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