问题标签 [on-duplicate-key]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - ON DUPLICATE KEY 查询中的重复项在哪里?
描述:
我正在尝试将用户的首选项插入数据库。如果用户还没有放置任何东西,我想要一个insert
,否则,我想要一个update
. 我知道我可以在创建用户时插入默认值,而不是专门使用update
,但这增加了另一个查询(我认为)
问题:
我已经阅读了,ON DUPLICATE KEY UPDATE
但我不明白。这几乎是我的确切问题,但没有答案。答案说:
只要您将正确的列定义为 UNIQUE KEY 或 PRIMARY KEY,它听起来确实适用于您想要做的事情。
如果我insert
像这样做一个简单的事情:
那将如何产生DUPLICATE KEY
?据mysql
所知,它只是另一个插入,并且id
是自动递增的。我将表中的主键设置为唯一的,但insert
不会对此进行检查,对吧?
桌子:
sql - MS Access:如何实现 ON DUPLICATE KEY UPDATE?
尽量避免单独查询以检查密钥是否存在,然后相应地插入或更新。从谷歌搜索看来,Access 也不支持 SQL 服务器的 MERGE。
谢谢
mysql - 在mysql中使用条件将用户的对象关系合并到另一个用户
这是我的第一个 SO 问题 :)
我正在尝试将临时用户“合并”到现有用户,以及他们所有相关的对象关系——一个是“post_relationships”
问题是..如果两个用户都与同一个帖子有关系,一个简单的 INSERT INTO ... SELECT 语句会产生一个 DUPLICATE KEY 错误..
另外,如果其中一个用户具有更高的权限级别,我想保留两个用户的最高权限级别。
我已经构建了一个有效的查询,但我想知道是否有更好的方法来完成这个。我担心随着表的增长,这个查询不会那么有效。
当条件出现时,它总是强制更新
这让我担心这里有一些矫枉过正的代码。有什么建议么?
谢谢!
mysql - 对唯一映射键的某些部分使用 ON DUPLICATE KEY UPDATE
我有如下所示的表格
在这张表中ItemAttMapID
是auto_increment
primary_key
并且ItemAttributeID, VendorID, VItemID
是Unique Mapping
。
我使用了以下查询
它给了我想要的正确结果,但是当我使用以下查询而不是更新特定记录时,它会插入新记录。
表的变化是这样的
我想要更新第三个数字行,但它正在向表中插入一条新记录。
如何使用 ON DUPLICATE KEY UPDATE 来实现这一点。
编辑:
我只想检查,如果VendorID
并且vItemID
已经存在,然后ItemAttributeID
使用 ON DUPLICATE KEY UPDATE 更新记录( NOT THE )。
因为如果我将ItemAttributeID
相同的内容放在VendorID
和vItemID
查询中,那么它会更新记录,否则它会插入新记录。
mysql - update on duplicate key update
I have a table playerspoints
that contains a shop id and a player's id, and a player's points.
What I want to do is transfer points from a shop to the other.
- Problem: shop id and players id form a unique index.
- What I want to do is on duplicate key update, instead of let it fail, to add the points of one entry to the other and delete the "from" entry.
Something like:
#xA;Do you get the idea?
php - PDO 使用命名占位符为 INSERT 和 ON DUPLICATE KEY UPDATE 准备语句
我想将 PDO INSERT 和 UPDATE 准备好的语句切换到 INSERT 和 ON DUPLICATE KEY UPDATE 因为我认为它会比我目前正在做的更有效率,但我无法找出正确的语法与命名占位符和 bindParam 一起使用。
我在 SO 上发现了几个类似的问题,但我是 PDO 的新手,无法成功地根据我的标准调整代码。这是我尝试过的,但它不起作用(它不插入或更新):
这是我的代码的简化版本(我有几个查询,每个查询有 20 - 50 个字段)。我目前正在首先更新并检查更新的行数是否大于 0,如果不是,则运行插入,并且每个查询都有自己的一组 bindParam 语句。
mysql - 如何使 MySQL 在重复键上返回冲突键?看里面
说,我有一个简单的表:id
作为主键,并且field
. 然后我做:
INSERT INTO table(id,field) VALUES (1,'blah')
然后我再做一次。那么,我怎样才能让 MySQL 返回以下内容:
ID
1
这样它就可以像 SELECT-ing 冲突键一样工作?
mysql - 如果存在则更新,否则插入,但具有非唯一列
我知道ON DUPLICATE KEY UPDATE
当我想更新一行(如果存在)或插入时,我可以使用“”。但就我而言,我想根据非唯一键进行更新。
例如:我有一个包含 3 列的表:A、B 和 C。它们共同构成唯一键。
现在,如果 B 和 C 的值匹配,我想更新该行,否则插入一个新行。
这可以在没有多个查询的情况下在 MySQL 中完成。
mysql - 在重复密钥更新上与插入相同
我四处寻找,但没有找到是否可能。
我有这个 MySQL 查询:
字段 id 有一个“唯一索引”,所以不能有两个。现在,如果数据库中已经存在相同的 id,我想更新它。但是我真的必须再次指定所有这些字段,例如:
或者:
我已经在插入中指定了所有内容......
额外说明一下,我想使用解决方法来获取 ID!
我希望有人能告诉我最有效的方法是什么。
mysql - 如何使用 ON DUPLICATE KEY 插入...选择
我有两个结构相同的表。表 A 包含所有当前广告,表 B 包含存档广告。第 1 列 (ad_id) 是主键、AI、INT。表引擎是 MyISAM。
我需要将某个日期之前的所有表 A 广告复制到存档表 B。我的目标是除了 ad_id 之外的所有字段都是重复的,ad_id 应该自动递增。这是我尝试过的:
表 B 有数千个广告,表 A 经常被刷新,以至于唯一 id 字段的数字很少,经常与表 B 中的 id 重复。所以 MySQL 摇摇晃晃地告诉我我有一个Duplicate entry '8577' for key 'PRIMARY'
.
所以我做了几次尝试来克服这个问题:
首先,我尝试选择要插入的各个列,设置ad_id
为 NULL:
这会导致错误#1241 - Operand should contain 1 column(s)
,如果我使用通配符 * 选择器,该错误就会消失,但随后会出现重复错误。
接下来我尝试SELECT LAST_INSERT_ID()
了,它总是返回 0。
然后我尝试了一些 using ON DUPLICATE KEY UPDATE
,但我似乎无法让它工作。
我什至试图通过以下方式获取最高 id:
这仅适用于一行,然后再次导致重复条目(因为 @max 是静态变量)。
我在这里做错了什么?我这样做是不是太难了?