2011-03-05 40 views
6

有这张表。插入的最快方法,如果不存在,则在MySQL中获取ID

| id | domain | 

id是主键。 domain是一个独特的密钥。

我想:

  1. 插入一个新的领域,如果不存在的话。
  2. 获取该域的id

我现在做这样的:

然后PDO::lastInsertId()得到id

但这很关键,所以我尽管我会问:我可以以更好的方式做到这一点吗?

+0

“ol li code”的CSS似乎有点偏离? – Znarkus 2011-03-05 10:20:52

+0

身份证是什么?它只是作为主键使用(即它对您的应用程序是不透明的吗?) – 2011-03-05 10:24:12

+0

是的。我使用它作为请求日志,并且认为varchar对于包含大量行的表是可扩展的。 – Znarkus 2011-03-06 16:16:32

回答

1

直到有人说不然,我说的是不,这是最好的方式

0

此方法有一个副作用:“每次找到重复键时,自动递增ID都会加1”。
当查询以exemple.com作为值第一次运行时 它创建条目。假设您再次重复该查询13次。之后,你尝试用xyz.com,你会惊讶地看到的那个,而不是自动递增ID = 2你得到15

1 exemple.com
15 xyz.com
25 pqr.com
50 THG .com

+0

请看这个问题http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update – Znarkus 2013-10-15 16:01:08

+0

重复键更新插入...的性能是主观的。请阅读:http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/ – AlphaLeader 2013-10-17 05:09:07

相关问题