作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我经常想向表中添加一个值,或者在其键已存在时更新该值。这可以通过多种方式实现,假设在示例中的“user_id”和“pref_key”列上设置了主键或唯一键:
<强>1。盲插入,如果收到重复键错误则更新:
// Try to insert as a new value
INSERT INTO my_prefs
(user_id, pref_key, pref_value)
VALUES (1234, 'show_help', 'true');
// If a duplicate-key error occurs run an update query
UPDATE my_prefs
SET pref_value = 'true'
WHERE user_id=1234 AND pref_key='show_help';
<强>2。检查是否存在,然后选择或更新:
// Check for existence
SELECT COUNT(*)
FROM my_prefs
WHERE user_id=1234 AND pref_key='show_help';
// If count is zero, insert
INSERT INTO my_prefs
(user_id, pref_key, pref_value)
VALUES (1234, 'show_help', 'true');
// If count is one, update
UPDATE my_prefs
SET pref_value = 'true'
WHERE user_id=1234 AND pref_key='show_help';
第一种方式似乎更可取,因为它只需要一次查询新插入和两次更新,而第二种方式总是需要两次查询。有什么我遗漏的,但盲目插入不是个好主意吗?
最佳答案
查看 http://dev.mysql.com/doc/refman/5.0/en/insert-select.html 中的 ON DUPLICATE KEY 语法
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
关于sql - 在 MySQL 中盲目使用 INSERT 有缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/149796/
这个查询 SELECT station_id, station_name, COUNT(event_station) as `total_visit_count`
我是一名优秀的程序员,十分优秀!