节点Mysql On Duplicate Key Update仅更新唯一行
|
我正在使用MySQL 5.7和Node JS 6.11.0,并且每当我插入冲突行时我都会尝试更新UNIQUE MySQL列.但是,当我尝试插入冲突记录时,只有现有记录更新为NULL并且不会发生插入.这是我的代码
我必须为要插入的行运行两次查询;第一次将冲突列设置为null,然后当我再次运行相同的查询时,将插入该行,因为没有冲突. 我已经生成了SQL并从MySql控制台直接运行它,我仍然需要为要插入的新行运行两次查询.我不明白为什么这样做.
我的创建表SQL是
为什么MySQL表现如此? 最佳答案
在存在冲突记录(重复的唯一键或主键)时告诉MySQL,将违规行的teacher_id列设置为null并停止. 您有几种方法可以达到理想的效果. 首先,您可以使用REPLACE语法.
这将首先删除具有UNIQUE或主键约束的违规行,并插入具有指定值的新行.缺点是任何省略的列值都将丢失并设置为其默认值.如果未在查询中指定,还将创建新的自动生成(如果有)id. 否则,您可以在UPDATE子句中使用VALUES.
相反,它会将违规行的记录更新为查询的INSERT部分中指定的值. 参考文献: > https://dev.mysql.com/doc/refman/5.7/en/replace.html 根据新意图更新 为了在离开前一行时创建新记录,在使用INSERT之前,您需要首先使现有行上的UNIQUE约束无效. 由于INSERT的限制,完成所需操作的最简单方法是在INSERT查询之前运行UPDATE查询.
这将首先检查冲突的teacher_id记录并将其设置为null.如果不存在冲突记录,则不会进行更新.然后,以下INSERT将创建所需的记录,而不会发生冲突. (编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Mysql实例MySQL实现批量检查表并进行repair与optimize的方法
- 0000-00-00 00:00:00作为MySQL DateTime输入
- php – “REPLACE INTO”与INSERT [IF]
- mysql – 如何在带有可选include的where子句中使用运算符?
- php – mysqli_fetch_all没有在共享主机上工作,需要替代
- 计数器在PHP / MySQL中不会增加
- php – 从master数据库获取数据库凭据,然后连接到不同的数据
- java – JOIN中的相同列名在ResultSet中出现“找不到列”错
- php – fetch当我从缓存中获取它时只返回一行
- Mysql:未知变量,无法运行任何mysql应用程序,似乎与my.cnf无
