如何确定某个值是否作为mySql中的主键存在?

时间:2020-03-06 15:03:16  来源:igfitidea点击:

找出表中是否已存在具有特定值的主键的最佳方法是什么?

我可以想到:

SELECT key FROM table WHERE key = 'value';

并计算结果,或者:

SELECT SQL_CALC_FOUND_ROWS key FROM table WHERE key = 'value' LIMIT 1;
SELECT FOUND_ROWS();

解决方案

我认为我们在这个问题中的任何建议都是合适的。

但是,根据使用方式的不同,可以通过执行INSERT IGNORE来节省时间,如果没有主键,则可以插入新行。如果确实存在,则将忽略该错误,因此我们可以照常继续。

根据使用情况,其他类似的选项包括使用插入的REPLACE或者INSERT ON DUPLICATE KEY UPDATE类型。如果主键已经存在,这使我们可以更新现有条目,否则它只会插入新条目。

首先执行并计算结果(始终为0或者1)。方便快捷。

例子

Select count(key) into :result from table where key = :theValue

如果我们要在插入还是更新之间做出决定,请在Oracle中使用MERGE语句。我相信MS-SQL就像是UPSERT语句。

我认为使用IF EXISTS将更直观,更简单。

IF EXISTS (SELECT key FROM table WHERE key = 'value')
    PRINT 'Found it!'
ELSE
    PRINT 'Cannot find it!'

我会做:

SELECT 1 FROM table WHERE id key = 'value'

其他任何因素都可能会稍微干扰查询优化,因此我会坚持下去。

编辑:尽管我刚刚意识到我不认为我曾经在MySQL中做到这一点,但是我不明白为什么它不起作用。