MYSQL中LIKE和=之间的区别?

MYSQL中LIKE和=之间的区别?,mysql,Mysql,两者之间有什么区别 SELECT foo FROM bar WHERE foobar='$foo' 及 LIKE可以进行通配符匹配: SELECT foo FROM bar WHERE foobar LIKE "Foo%" 如果不需要模式匹配,那么使用=而不是LIKE。它更快更安全。(您正在使用参数化查询,对吗?=在SQL中进行精确匹配 类似于进行通配符匹配,使用“%”作为多字符匹配符号,使用“\”作为单字符匹配符号。\'是默认的转义字符 foobar='$foo'和类似于'$foo'的fo

两者之间有什么区别

SELECT foo FROM bar WHERE foobar='$foo'


LIKE可以进行通配符匹配:

SELECT foo FROM bar WHERE foobar LIKE "Foo%"

如果不需要模式匹配,那么使用=而不是LIKE。它更快更安全。(您正在使用参数化查询,对吗?

=在SQL中进行精确匹配

类似于进行通配符匹配,使用“%”作为多字符匹配符号,使用“\”作为单字符匹配符号。\'是默认的转义字符

foobar='$foo'
和类似于'$foo'的
foobar行为相同,因为两个字符串都不包含通配符

SELECT foo FROM bar WHERE foobar LIKE'$foo%'
foobar类似于“%foo”
将匹配任何以“foo”结尾的内容

LIKE
还有一个
ESCAPE
子句,因此可以设置转义字符。这将允许您匹配字符串中的文字“%”或“\u1”。你也可以做
不喜欢的事

MySQL站点已经更新了。语法是

expression [NOT] LIKE pattern [ESCAPE 'escape']

最终结果将是相同的,但查询引擎使用不同的逻辑来获得答案。通常,LIKE查询比“=”查询燃烧更多的周期。但是当没有提供通配符时,我不确定优化器会如何处理它。

与您问题中的示例没有区别

但是就像Jesse说的你可以做通配符匹配

SELECT foo FROM bar WHERE foobar LIKE "Foo%"

SELECT foo FROM bar WHERE foobar NOT LIKE "%Foo%"
更多信息:


根据,尾随空格在LIKE中很重要,但在=,并且您可以对任何字符使用通配符%,而对一个字符使用u。

稍微使用一点og google并没有坏处

如果我们想进行精确匹配,则带有等号(=)的WHERE子句可以正常工作。但我们可能需要过滤掉所有结果,其中“foobar”应该包含“foo”。这可以使用类似SQL的子句和WHERE子句来处理

如果SQL LIKE子句与%个字符一起使用,则它将像通配符一样工作

SELECT foo FROM bar WHERE foobar LIKE'$foo%'

没有%字符的LIKE子句与等号以及WHERE子句非常相似。

在您的示例中,它们在语义上是相等的,应该返回相同的输出

但是,LIKE将为您提供使用通配符进行模式匹配的能力


您还应该注意,=可能会在某些系统上提高性能,因此,例如,如果您正在搜索exakt编号,=将是首选方法。

看起来非常像从PHP脚本中取出的。其目的是将变量
$foo
的内容与
foo
数据库字段进行模式匹配,但我打赌它应该用双引号来写,因此$foo的内容将被输入到查询中

正如您所说,没有区别。


它可能会慢一些,但我敢打赌MySQL意识到搜索字符串中没有通配符,所以它毕竟不会像模式匹配一样,所以实际上,没有区别。

我认为从速度的角度来看,速度=比LIKE快。如上所述,=进行精确匹配,如果需要,可以使用通配符

每当我知道某事的价值时,我总是使用=符号。比如说

select * from state where state='PA'
然后,对于喜欢的人,我会使用以下内容:

select * from person where first_name like 'blah%' and last_name like 'blah%'

如果您使用Oracle Developers工具,可以使用Explain对其进行测试,以确定对数据库的影响。

在我的例子中,我发现
Like
=
更快

  • Like
    第一次以0.203秒的速度获取了许多行,然后是0.140秒

  • =
    返回在0.156秒内连续获取的相同行


根据您的选择

请记住,MySQL将根据情况进行转换:LIKE将执行字符串转换,而=将执行int转换。考虑到以下情况:

    (int)   (vchar2)
id  field1  field2
1   1       1
2   1       1,2
选择* 从
测试
作为 在a.field1和b.field2上以b的形式左键连接
测试

将产生

id  field1  field2  id  field1  field2
1   1       1       1   1       1
2   1       1,2     1   1       1
id  field1  field2  id  field1  field2
1   1       1       1   1       1
1   1       1       2   1       1,2
2   1       1,2     1   1       1
2   1       1,2     2   1       1,2
鉴于

选择* 从
测试
作为 在a.field1=b.field2上以b的形式左连接
test

将产生

id  field1  field2  id  field1  field2
1   1       1       1   1       1
2   1       1,2     1   1       1
id  field1  field2  id  field1  field2
1   1       1       1   1       1
1   1       1       2   1       1,2
2   1       1,2     1   1       1
2   1       1,2     2   1       1,2

我发现了
LIKE
和等号
=
之间的一个重要区别

示例:我有一个带有字段“ID”(type:int(20))的表和一个包含值“123456789”的记录

如果我这样做:

SELECT ID FROM example WHERE ID = '123456789-100'
SELECT ID FROM example WHERE ID LIKE '123456789-100'
找到ID为“123456789”的记录(结果不正确)

如果我这样做:

SELECT ID FROM example WHERE ID = '123456789-100'
SELECT ID FROM example WHERE ID LIKE '123456789-100'
未找到任何记录(这是正确的)


所以,至少对于整数字段来说,这似乎是一个重要的区别…

谢谢。我想LIKE可能会检查一些小的拼写错误,这可能只是意味着查询被缓存了。这是一个很好的观点,举个例子,其中field1(varchar column)的值是“1234”,后面有一个空格-SELECT*FROM table1,其中field1='1234'将返回行,SELECT*FROM table1,其中类似于'1234'的field1将不会返回行。。。