如何在MySQL表中构造另一个主键?

如何在MySQL表中构造另一个主键?,mysql,indexing,primary-key,mybatis,Mysql,Indexing,Primary Key,Mybatis,以下是表格列: id | A | detail id本身是主键自动递增A是我希望它是唯一的字段 我不想每次都从表中选择id,其中A=“XXX”来检查表中是否已经有相同的A 我想要的是: 当表中有相同的a时,不要插入,只需为我返回id即可 如果表中没有相同的a,请插入它,然后为我返回id 我使用的是mybatis,记录量非常大,1000万左右,因此我需要足够有效的解决方案 谁能告诉我怎么做?非常感谢 ALTER TABLE tablename ADD UNIQUE (A); 这应该是一个独特的

以下是表格列:

id | A | detail
id
本身是主键自动递增
A
是我希望它是唯一的字段

我不想每次都从表中选择id,其中A=“XXX”来检查表中是否已经有相同的A

我想要的是:

  • 当表中有相同的a时,不要插入,只需为我返回id即可
  • 如果表中没有相同的a,请插入它,然后为我返回id
  • 我使用的是
    mybatis
    ,记录量非常大,1000万左右,因此我需要足够有效的解决方案

    谁能告诉我怎么做?非常感谢

    ALTER TABLE tablename ADD UNIQUE (A);
    
    这应该是一个独特的例子


    这将使列成为唯一的。

    确保列A唯一的唯一方法是声明它唯一。只有dbms才能保证唯一性

  • 当表中有相同的a时,不要插入,只需为我返回id即可
  • 如果表中没有相同的a,请插入它,然后为我返回id
  • MySQL支持一个语句。它的记录行为是

    如果表格包含自动增量列并插入。。。在重复键更新插入或更新行时,最后一个函数返回自动增量值

    小心使用——链接文档引用错误报告


    我相信mybatis提供了一种获取last_insert_id()值的简单方法。

    确保列A唯一的唯一方法是声明它唯一。只有dbms才能保证唯一性

  • 当表中有相同的a时,不要插入,只需为我返回id即可
  • 如果表中没有相同的a,请插入它,然后为我返回id
  • MySQL支持一个语句。它的记录行为是

    如果表格包含自动增量列并插入。。。在重复键更新插入或更新行时,最后一个函数返回自动增量值

    小心使用——链接文档引用错误报告


    我相信mybatis提供了一种获取上次插入id()值的简单方法。

    1000万不是很大。只需创建一个索引并使用explain检查您的查询是否正在使用itI。我不知道如何使用
    explain
    ,我可以添加一些内容来强制使用
    索引吗?请给我一些代码片段。谢谢@1000万不是很大。只需创建一个索引并使用explain检查您的查询是否正在使用itI。我不知道如何使用
    explain
    ,我可以添加一些内容来强制使用
    索引吗?请给我一些代码片段。谢谢@EDHEALW当记录量约为1000万条时,它不会影响插入的速度吗?我不知道,但我想可能需要更长的时间,因为它必须检查表中是否有另一个a。是的,它会影响速度-需要另一个索引。但是,您可能会在插入和删除上获得效率节约,当记录量约为1000万条时,这不会影响插入的速度吗?我不知道,但我想可能需要更长的时间,因为它必须检查表中是否有另一个a。是的,这会影响速度-需要另一个索引。但同样地,您可能会在插入和删除上获得效率节约。根据上一个\u INSERT\u ID()文档,如果插入。。。在重复密钥上,更新将遵循更新路径,因此很遗憾,这并不能解决问题#1然后您应该将其报告为文档错误。并测试两种不同的记录行为中哪一种是正确的。仅供参考:使用
    insert。。。在重复密钥更新id=last\u insert\u id()时,
    可以检索原始id。@Romankonovalac根据last\u insert\u id()文档,如果insert。。。在重复密钥上,更新将遵循更新路径,因此很遗憾,这并不能解决问题#1然后您应该将其报告为文档错误。并测试两种不同的记录行为中哪一种是正确的。仅供参考:使用
    insert。。。重复密钥更新id=last_insert_id()
    可以检索原始id。@romankonova