Sql 为什么使用LIKE而不是'=';选择主键字段时

Sql 为什么使用LIKE而不是'=';选择主键字段时,sql,sqlite,primary-key,Sql,Sqlite,Primary Key,在使用Sqlite的基于python的web框架for Battle中,我很感兴趣地看到主键为SELECTed的所有SQL示例都使用了LIKE而不是= 下面是一个简单的例子: SELECT * FROM foo WHERE foo_id LIKE '1' 是否有理由这样做而不是简单地做: SELECT * FROM foo WHERE foo_id = 1 由于id被声明为INTEGER主键,因此没有任何好处。事实上,它可能会慢一些,因为像这样会导致表扫描而不是使用主键索引。因为id被声明为

在使用Sqlite的基于python的web框架for Battle中,我很感兴趣地看到主键为
SELECT
ed的所有SQL示例都使用了
LIKE
而不是
=

下面是一个简单的例子:

SELECT * FROM foo WHERE foo_id LIKE '1'
是否有理由这样做而不是简单地做:

SELECT * FROM foo WHERE foo_id = 1

由于
id
被声明为
INTEGER主键
,因此没有任何好处。事实上,它可能会慢一些,因为像这样会导致表扫描而不是使用主键索引。

因为
id
被声明为
整数主键,所以没有任何好处。事实上,它可能会慢一些,因为像这样会导致表扫描而不是使用主键索引。

它们会产生相同的结果,但“类似”的结果会差得多。我做了一个简单的测试,下面是执行计划


编辑:这是MSSQL,因为我手头有一个工具,但是在任何db中的结果都是一样的,它们会产生相同的结果,但是“LIKE”的结果会差得多。我做了一个简单的测试,下面是执行计划


编辑:这是MSSQL,因为我手头有一个工具,但是结果在任何db中都几乎相同,比如用于模式匹配,=表示相等。不同的操作员。我不确定第一个问题是什么,或者是什么意思。我觉得你的意见非常贬损。这就像,太卑鄙了。比如山谷女孩对你做过什么?foo_id的数据类型是什么?第一个查询将其视为字符串;第二个查询将其视为数字。因此,这些查询不是等价的,可能会给出非常不同的结果!LIKE用于模式匹配,=表示相等。不同的操作员。我不确定第一个问题是什么,或者是什么意思。我觉得你的意见非常贬损。这就像,太卑鄙了。比如山谷女孩对你做过什么?foo_id的数据类型是什么?第一个查询将其视为字符串;第二个查询将其视为数字。因此,这些查询不是等价的,可能会给出非常不同的结果!对于其他DBMS,这不一定是相同的,因为不同的DBMS有不同的隐式类型转换规则。另外,大多数其他DBMS都支持不同类型的索引(我的意思是B树除外)。对于其他DBMS,这不一定相同,因为不同的DBMS有不同的隐式类型转换规则。此外,大多数其他DBMS支持不同类型的索引(我的意思是B树除外)。