从MySQL 4.1.0开始,可以在目标表wrt 或某个字段中已经ON DUPLICATE KEY UPDATE
插入的值(使用INSERT
或SET
或VALUES
)时添加语句来指定行为。如果表中已经有或个字段的值,则将其替换为。PRIMARY KEY``UNIQUE``PRIMARY KEY``UNIQUE``INSERT``UPDATE
ON DUPLICATE KEY UPDATE
如果UNIQUE
我的表中有多个 字段,该如何处理?
如果任一UNIQUE
字段匹配,我只能进行一次更新吗?
仅当两个UNIQUE
字段同时匹配时才能更新吗?
考虑
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
如果a和b是UNIQUE
字段,则UPDATE
发生在a = 1 OR b = 2
。同样,当a = 1 OR b = 2
两个或多个条目满足条件时,更新仅执行一次。
此处带有ID和Name UNIQUE
字段的表格表
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
如果查询是
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
然后我们得到
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
这违反了ID和Name的唯一性。现在用
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7
我们得到
Id Name Value
1 P 7
2 C 7
3 D 29
4 A 6
多个键上的行为如下
UPDATE``ON DUPLICATE KEY UPDATE
如果UNIQUE
字段之一等于要插入的值,则执行in
。在这里,UPDATE
在上执行Id = 1 OR Name = C
。相当于
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
如果我只想对一个密钥进行一次更新怎么办
可以使用UPDATE
带有LIMIT
关键字的语句
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
这将给
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
如果仅当两个键的值都匹配时我想要一次更新怎么办
一种解决方案是ALTER TABLE
使PRIMARY KEY
(或唯一性)在两个领域都起作用。
ALTER TABLE table
DROP PRIMARY KEY
ADD PRIMARY KEY (Id, Name);
从今起
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7
我们得到
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
因为没有发现两个键都重复。
问题内容: 我有两个表->变量(id,名称)和Variable_Entries(id,var_id,值)。 我希望每个变量都具有唯一的一组条目。如果我使值条目唯一,那么其他变量将无法具有相同的值,这是不正确的。 有什么办法可以使相同的var_id的value列唯一? 问题答案: 是的: 现在,您对var_id和value有了唯一的约束。换句话说,var_id和value的出现不能出现多次。
问题内容: 如何根据“ DateAdded”字段选择一个字段的使用天数? 例如: 问题答案: 使用: 参考:DATEDIFF DATEDIFF()返回expr1到expr2,表示为从一个日期到另一个日期的天数值。
问题内容: 我有一个观点。 在我有很多的信息的一些系统,如和我要保存所有。在中,我只想添加一个信息。 这两个视图之间的匹配字段是和。因此,我必须在两个视图中匹配具有相同IP和端口的那些主机。 例子: 查看A: 查看B: 输出 注意:视图A的某些主机可能在视图B中没有与IP /端口相关的项目。 视图A的某些主机也可能在视图B中具有某些匹配项。 我以为我应该使用LEFT JOIN才能拥有View A的
本文向大家介绍MySQL命令行删除表中的一个字段,包括了MySQL命令行删除表中的一个字段的使用技巧和注意事项,需要的朋友参考一下 先看看删除之前的表结构: mysql> select * from test; +------+--------+----------------------------------+------------+------------+------------+---
问题内容: 我的SQL模式是 MySQL允许重复以下语句,从而导致重复。 尽管有 为什么可以忍受,我如何制止它? 问题答案: 警告:此答案已过时。 从MySQL 5.1开始,不支持BDB。 这取决于。不允许使用多个值,但即使使用也允许多个。
问题内容: 使用,我可以做类似的事情: 我的输出: 但是我只想要1行1列: 预期产量: 原因是我要从多个表中选择多个值,并且在所有联接之后,我得到的行比我想要的要多得多。 我在MySQL Doc上寻找了一个函数,但看起来不像或函数接受结果集。 那么,这里有人知道该怎么做吗? 问题答案: 您可以使用: 正如路德维希(Ludwig)在其评论中所述,您可以添加运算符以避免重复: 正如Jan在他们的评论中