0

我有一个包含 4 列(id、name、surname、tel)的表,
id 是主键
名称,surname 和 tel 是唯一的。

现在我必须插入一行,如果已经有一行具有该名称-姓-tel 的行,则获取 id 并返回它,否则正常插入。

我想到了2个策略:
1)在插入之前做一个选择,如果没有找到就插入它,否则取id
2)尝试插入,如果发生错误代码1(违反唯一约束)做选择并取id

哪一个更好?还是我可以通过 php 执行另一种策略?

4

1 回答 1

2

你是对的,这些是最好的选择。就性能而言,如果有的话,差异很小。

如果你做第一个,你还必须实施第二个。因为在您的第一个SELECT请求和您的第二个INSERT语句之间,另一个进程可能已经更改了数据库,除非您在单个事务中执行此操作。

你可以把它变成一个SELECT INTO语句来在一个查询中插入/检查,但是你仍然需要做第二个SELECT来获取 ID。

所以总而言之:我会选择第二个选项,您可以在其中插入并检查错误。

于 2013-01-03T14:01:51.000 回答