Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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。。。获取现有ID?_Mysql_Database_Key - Fatal编程技术网

重复密钥上的MySQL。。。获取现有ID?

重复密钥上的MySQL。。。获取现有ID?,mysql,database,key,Mysql,Database,Key,我正在使用重复键更新上的来处理表上的重复插入,以便丢弃它们 在我的例子中,它是一个存储标记的简单表: id(整数、主键、AI、无符号、非空) 标记(varchar 25,非空,唯一) 这很好,但我需要检索ID—成功插入时的插入ID,或者现有ID(如果是重复的话) 我在重复密钥更新时得到insert ID=0where,我猜这是预期的行为,因为没有发生插入 我是否可以获取现有ID,或者我是否要进行单独的读取查询?您可以添加第三列ModifiedDate,并使用该列: insert into t

我正在使用重复键更新上的
来处理表上的重复插入,以便丢弃它们

在我的例子中,它是一个存储标记的简单表:

  • id(整数、主键、AI、无符号、非空)
  • 标记(varchar 25,非空,唯一)
这很好,但我需要检索ID—成功插入时的插入ID,或者现有ID(如果是重复的话)

我在重复密钥更新时得到insert ID=
0
where
,我猜这是预期的行为,因为没有发生插入


我是否可以获取现有ID,或者我是否要进行单独的读取查询?

您可以添加第三列
ModifiedDate
,并使用该列:

insert into t(id, tag)
    select id, tag
    on duplicate key update ModifiedDate = now();

这将确保更新确实发生,反过来,
LAST\u INSERT\u ID();这可能导致很难跟踪和/或调试错误。在非常快速和重复的操作、循环等过程中,记录可能会在同一秒钟内被更新不止一次,也就是说,使用相同的日期时间表示法,因此即使您确信正在更新记录,也不会有效地更新记录。经过数小时的调试后,我在代码中介绍了这一点。也许您可以使用整数数据类型,在每次更新时添加一个单位,或者在现有时间值上添加一秒钟,这样做。@Pere。有趣的问题。如文档和几个类似的问题/答案所述,最好的方法应该是在重复密钥更新id=LAST\u INSERT\u id(id)
上使用
来解决这个问题,重复密钥更新unneedcol=coalesce(unneedcol,0)+1
@GordonLinoff和@Utkanos:。当
UNIQUE
键已经存在时,即使没有更改,也会导致记录得到更新;你可以自己测试。