Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql的重复密钥更新。是否可以将INSERT语句中的值作为实体引用,而不是一次引用一个字段?_Mysql - Fatal编程技术网

mysql的重复密钥更新。是否可以将INSERT语句中的值作为实体引用,而不是一次引用一个字段?

mysql的重复密钥更新。是否可以将INSERT语句中的值作为实体引用,而不是一次引用一个字段?,mysql,Mysql,我还没有找到这样做的语法,我觉得令人沮丧的是,我没有看到任何明确表示它无法完成的东西,所以我一直在搜索 对于表“table_one”,以及一个唯一字段“table_one.a”(主键),是否可以执行以下操作: INSERT INTO `table_one` (a,b,c,d,e,f,g,h) VALUES (1,2,3,4,5,6,7,8) ON DUPLICATE KEY UPDATE VALUES(); 我知道以下方法: INSERT INTO `table_one` (a,b,c,d

我还没有找到这样做的语法,我觉得令人沮丧的是,我没有看到任何明确表示它无法完成的东西,所以我一直在搜索

对于表“table_one”,以及一个唯一字段“table_one.a”(主键),是否可以执行以下操作:

INSERT INTO `table_one` (a,b,c,d,e,f,g,h) VALUES (1,2,3,4,5,6,7,8)
  ON DUPLICATE KEY UPDATE VALUES();
我知道以下方法:

INSERT INTO `table_one` (a,b,c,d,e,f,g,h) VALUES (1,2,3,4,5,6,7,8)
  ON DUPLICATE KEY UPDATE `b` = '2', `c` = '3', `d` = '4', `e` = '5', `f` = '6', `g` = '7', `h` = '8';


我希望(如果不可能的话)有人能给我指一个解释原因的参考资料。

这不可能,因为它违反了
更新
语法,所以你必须列出每一列。您可以考虑使用
REPLACE-into
,但要小心,因为这实际上会删除该行并再次添加该行,因此可能会丢失一些值--它还会在DELETEs时触发外键
。然而,这是一种不那么冗长的方式来做你想做的事。


没有任何参考资料可以解释原因:根本没有语法允许您这样做。

您可以将值与REPLACE-INTO一起使用,这就是为什么在重复密钥更新时无法使用值的原因。我会接受“现在是什么”,继续前行,肩膀上的重量会减轻一点。很好地提到了使用REPLACE-INTO的陷阱。我花了几个小时搜索关于这个问题的信息,对于错过这样一个类似的请求感到有点尴尬。
INSERT INTO `table_one` (a,b,c,d,e,f,g,h) VALUES (1,2,3,4,5,6,7,8)
  ON DUPLICATE KEY UPDATE `b` = 'VALUES(b)', `c` = 'VALUES(c)', `d` = 'VALUES(d)', `e` = 'VALUES(e)', `f` = 'VALUES(f)', `g` = 'VALUES(g)', `h` = 'VALUES(h)';