如何确定某个值是否作为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中做到这一点,但是我不明白为什么它不起作用。