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 获取新插入元素或现有元素的最后一个ID_Mysql - Fatal编程技术网

Mysql 获取新插入元素或现有元素的最后一个ID

Mysql 获取新插入元素或现有元素的最后一个ID,mysql,Mysql,我有一个以下映射表,名称列上有一个唯一键: id | name 1 aaa 2 bbb 3 ccc 如果我在此表中插入一个新值,我希望获得一个新创建的ID,如下所示: INSERT IGNORE INTO map VALUES(null, 'ddd'); 我知道我可以用getLastId()函数来实现这一点。但如果名称已经存在,我还想获取ID,在这种情况下,getLastId()函数返回0: INSERT IGNORE INTO map VALUES(null, 'ccc'

我有一个以下映射表,名称列上有一个唯一键:

id | name
1    aaa
2    bbb
3    ccc
如果我在此表中插入一个新值,我希望获得一个新创建的ID,如下所示:

INSERT IGNORE INTO map VALUES(null, 'ddd');
我知道我可以用
getLastId()
函数来实现这一点。但如果名称已经存在,我还想获取ID,在这种情况下,
getLastId()
函数返回0:

INSERT IGNORE INTO map VALUES(null, 'ccc');

这是否可能只使用一个SQL,而不检查记录是否存在,等等?

我认为您需要为该SQL付出额外的努力:

  • 检查是否存在-如果存在:获取该名称的ID
  • 如果没有:
    选择最后一个插入ID()

    • 我认为你需要为这一点付出额外的努力:

      • 检查是否存在-如果存在:获取该名称的ID
      • 如果没有:
        选择最后一个插入ID()

      取决于什么是单个查询

      当您使用
      插入到。。。在重复密钥更新时
      您可以控制
      最后一次插入\u ID()
      ,这样它将在插入时返回新ID,并在更新时返回“更新”行的ID:

      INSERT INTO map (name) VALUE ('ccc') 
        ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
      
      这将使
      最后一次插入\u ID()
      然后返回您感兴趣的行的
      map.ID

      无论您将哪个API命名为
      getLastId()
      (我不知道,因此无法提供更多关于它的指针),这可能不起作用,然后您需要启动第二个查询来获取它:

      SELECT LAST_INSERT_ID();
      
      另见:

      • (Stackoverflow问答,2009年4月)

      取决于什么是单个查询

      当您使用
      插入到。。。在重复密钥更新时
      您可以控制
      最后一次插入\u ID()
      ,这样它将在插入时返回新ID,并在更新时返回“更新”行的ID:

      INSERT INTO map (name) VALUE ('ccc') 
        ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
      
      这将使
      最后一次插入\u ID()
      然后返回您感兴趣的行的
      map.ID

      无论您将哪个API命名为
      getLastId()
      (我不知道,因此无法提供更多关于它的指针),这可能不起作用,然后您需要启动第二个查询来获取它:

      SELECT LAST_INSERT_ID();
      
      另见:

      • (Stackoverflow问答,2009年4月)
      getLastId()
      即使在插入时也不会给出“id”列的值。您案例中的ID是“name”。你已经有“名字”了。我想说的是,这更像是一个关于身份实际上是什么的概念。
      getLastId()
      即使在insert中也不会给出“id”列的值。您案例中的ID是“name”。你已经有“名字”了。我想说的是,这更像是一个关于身份的概念。