草庐IT

Update-proof

全部标签

mysql - MySQL 中的 `REPLACE` 和 `INSERT ... ON DUPLICATE KEY UPDATE` 之间有什么实际区别?

我需要的是使用特定键设置记录的所有字段的值(键实际上是复合键),如果还没有具有这样键的记录,则插入记录。REPLACE似乎是为了完成这项工作,但同时它的手册页建议INSERT...ONDUPLICATEKEYUPDATE.我应该更好地选择它们中的哪一个?为什么?我想到的REPLACE的唯一“副作用”是它会增加自动增量值(幸运的是我不使用任何值)而INSERT...ONDUPLICATEKEYUPDATE可能不会。还有哪些实际差异需要考虑?在哪些特定情况下,REPLACE可以优于INSERT...ONDUPLICATEKEYUPDATE,反之亦然? 最佳答案

mysql - INSERT INTO .. ON DUPLICATE KEY UPDATE 为多个项目

我想做这样的事情INSERTINTOt(t.a,t.b,t.c)VALUES('key1','key2','value')ONDUPLICATEKEYUPDATEt.c='value';INSERTINTOt(t.a,t.b,t.c)VALUES('key1','key3','value2')ONDUPLICATEKEYUPDATEt.c='value2';t.a和t.b是键。这一切都很好,但我在第二次插入时出错。使用phpMyAdmin,这样的查询可以正常工作,但我猜它正在独立运行查询,因为它将查询的结果作为注释打印出来?这样的东西也很好,但我需要为每个项目设置不同的值。我更喜欢这个

mysql - 何时使用 SELECT ... FOR UPDATE?

请帮助我理解SELECT...FORUPDATE背后的用例。问题1:以下是什么时候应该使用SELECT...FORUPDATE的一个很好的例子吗?给定:房间[id]标签[id,name]room_tags[room_id,tag_id]room_id和tag_id是外键应用程序想要列出所有房间及其标签,但需要区分没有标签的房间和已删除的房间。如果不使用SELECT...FORUPDATE,可能发生的情况是:最初:房间包含[id=1]标签包含[id=1,name='cats']room_tags包含[room_id=1,tag_id=1]线程1:SELECTidFROMrooms;返回[

SQL UPDATE 带有附加字符串 CONCAT 的字段中的所有值不起作用

这是我想做的:当前表:+----+-------------+|id|data|+----+-------------+|1|max||2|linda||3|sam||4|henry|+----+-------------+神秘查询(类似于"UPDATEtableSETdata=CONCAT(data,'a')")结果表:+----+-------------+|id|data|+----+-------------+|1|maxa||2|lindaa||3|sama||4|henrya|+----+-------------+就是这样!我只需要在一个查询中完成它,但似乎找不到方法。我

mysql - 外键约束 : When to use ON UPDATE and ON DELETE

我正在使用MySQLWorkbench设计我的数据库架构,这非常酷,因为您可以绘制图表并转换它们:P无论如何,我决定使用InnoDB,因为它支持外键。我注意到的一件事是它允许您为外键设置更新和删除选项。有人能解释一下在一个简单的例子中可以在哪里使用“限制”、“级联”和设置空值吗?例如,假设我有一个user包含userID的表.并说我有一个消息表message这是一个多对多,有2个外键(在userID表中引用相同的主键user)。在这种情况下,设置OnUpdate和OnDelete选项有用吗?如果是,我该选择哪一个?如果这不是一个很好的例子,你能否提出一个很好的例子来说明这些是如何有用的

sql - MySQL ON DUPLICATE KEY UPDATE 在单个查询中插入多行

我有一个SQL查询,我想在单个查询中插入多行。所以我使用了类似的东西:$sql="INSERTINTObeautiful(name,age)VALUES('Helen',24),('Katrina',21),('Samia',22),('HuiLing',25),('Yumie',29)";mysql_query($sql,$conn);问题是当我执行这个查询时,我想检查一个UNIQUE键(不是PRIMARYKEY),例如上面的'name'应该被检查,如果这样的'name'已经存在,则应该更新相应的整行,否则插入。例如,在下面的示例中,如果'Katrina'已经存在于数据库中,则无论字

MySQL - 基于 SELECT Query 的 UPDATE 查询

我需要根据日期时间检查(从同一张表中)两个事件之间是否存在关联。一组数据将包含某些事件的结束日期时间,另一组数据将包含其他事件的开始日期时间。如果第一个事件在第二个事件之前完成,那么我想将它们链接起来。到目前为止我所拥有的是:SELECTnameasname_A,date-timeasend_DTS,idasid_AFROMtableAWHEREcriteria=1SELECTnameasname_B,date-timeasstart_DTS,idasid_BFROMtableAWHEREcriteria=2然后我加入他们:SELECTname_A,name_B,id_A,id_B,i

mysql - 如何在 UPDATE 查询中执行三个表 JOIN?

我问了一个问题并得到了帮助。UPDATETABLE_AaJOINTABLE_BbONa.join_col=b.join_colANDa.column_a=b.column_bSETa.column_c=a.column_c+1现在,如果涉及到三个表,我希望这样做。UPDATEtableCcJOINtableBbJOINtableAa我的问题基本上是......是否可以在UPDATE语句上进行三个表连接?它的正确语法是什么?我要执行以下操作吗?JOINtableB,tableAJOINtableBJOINtableA 最佳答案 答案是

MySQL错误代码: 1175 during UPDATE in MySQL Workbench

我正在尝试更新列visited以赋予其值1。我使用MySQL工作台,并且正在工作台内部的SQL编辑器中编写语句。我正在编写以下命令:UPDATEtablenameSETcolumnname=1;它给了我以下错误:YouareusingsafeupdatemodeandyoutriedtoupdateatablewithoutaWHEREthatusesaKEYcolumnTodisablesafemode,toggletheoption....我按照说明进行操作,然后取消选中Edit菜单中的safeupdate选项,然后取消选中Preferences然后SQLEditor。仍然出现相同

mysql - "INSERT IGNORE"与 "INSERT ... ON DUPLICATE KEY UPDATE"

在执行包含许多行的INSERT语句时,我想跳过可能导致失败的重复条目。经过一番研究,我的选择似乎是使用以下任一:ONDUPLICATEKEYUPDATE这意味着需要付出一些代价进行不必要的更新,或者INSERTIGNORE暗示其他类型的失败会在未经通知的情况下溜进来。我的这些假设是否正确?简单地跳过可能导致重复的行并继续到其他行的最佳方法是什么? 最佳答案 我建议使用INSERT...ONDUPLICATEKEYUPDATE。如果您使用INSERTIGNORE,则如果它导致重复键,则不会实际插入该行。但该语句不会产生错误。它会生成一