如何确定表中是否已存在某个特定值的主键?
我可以想到以下方法:
SELECT key FROM table WHERE key = 'value';
并计算结果,或者:
SELECT SQL_CALC_FOUND_ROWS key FROM table WHERE key = 'value' LIMIT 1;
SELECT FOUND_ROWS();
如何确定表中是否已存在某个特定值的主键?
我可以想到以下方法:
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 1 FROM table WHERE id key = 'value'
其他任何事情可能会稍微干扰查询优化,所以我建议你坚持这样做。
编辑:虽然我刚意识到我从未在MySQL中这样做过,但我看不出为什么它不能使用。
从mytable中选择mykey='value'的第一个值
例子
Select count(key) into :result from table where key = :theValue
我认为使用IF EXISTS会更直观和简单。
IF EXISTS (SELECT key FROM table WHERE key = 'value')
PRINT 'Found it!'
ELSE
PRINT 'Cannot find it!'