欢迎来到 wabc.cc 官方网站!

郑州Web前端就业课程怎样 有哪些MySQL错误用法

来源:推荐文章 / 时间:2025-12-20

  郑州Web前端就业课程怎样?有哪些MySQL错误用法?无论是前端开发还是后台应用,都需要掌握数据库相关的知识,而MySQL是企业常用的数据库之一。对于一个Web前端小白来说,在完成HTML+CSS的基础学习后,他们还需要学习MySQL相关操作,今天千锋郑州Web前端小编列举几种比较常见的MySQL错误用法,希望大家能够引以为鉴。

  1、隐式转换

  SQL语句中查询变量和字段定义类型不匹配是另一个常见的错误。比如下面的语句:

  mysql> explain extended SELECT *

  > FROM my_balance b

  > WHERE b.bpn = 14000000123

  > AND b.isverified IS NULL ;

  mysql> show warnings;

  | Warning | 1739 | Cannot use ref access on index 'bpn' due to type or collation conversion on field 'bpn'

  其中字段bpn的定义为varchar(20),MySQL的策略是将字符串转换为数字之后再比较。函数作用于表字段,索引失效。

  上述情况可能是应用程序框架自动填入的参数,而不是程序员的原意。现在应用框架很多很繁杂,使用方便的同时也小心它可能给自己挖坑。

  2、混合排序

  MySQL不能利用索引进行混合排序,但在某些场景,还是有机会使用特殊方法提升性能的。

  SELECT *

  FROM my_order o

  INNER JOIN my_appraise a ON a.orderid = o.id

  ORDER BY a.is_reply ASC,

  a.appraise_time DESC

  LIMIT 0, 20

  由于is_reply只有0和1两种状态,我们按照上面的方法重写后,执行时间从1.58秒降低到2毫秒。

  SELECT *

  FROM ((SELECT *

  FROM my_order o

  INNER JOIN my_appraise a

  ON a.orderid = o.id

  AND is_reply = 0

  ORDER BY appraise_time DESC

  LIMIT 0, 20)

  UNION ALL

  (SELECT *

  FROM my_order o

  INNER JOIN my_appraise a

  ON a.orderid = o.id

  AND is_reply = 1

  ORDER BY appraise_time DESC

  LIMIT 0, 20)) t

  ORDER BY is_reply ASC,

  appraisetime DESC

  LIMIT 20;

  3、EXISTS语句

  MySQL对待EXISTS子句时,仍然采用嵌套子查询的执行方式。如下面的SQL语句:

  SELECT *

  FROM my_neighbor n

  LEFT JOIN my_neighbor_apply sra

  ON n.id = sra.neighbor_id

  AND sra.user_id = 'xxx'

  WHERE n.topic_status < 4

  AND EXISTS(SELECT 1

  FROM message_info m

  WHERE n.id = m.neighbor_id

  AND m.inuser = 'xxx')

  AND n.topic_type <> 5

  去掉exists更改为join,能够避免嵌套子查询,将执行时间从1.93秒降低为1毫秒。

  SELECT *

  FROM my_neighbor n

  INNER JOIN message_info m

  ON n.id = m.neighbor_id

  AND m.inuser = 'xxx'

  LEFT JOIN my_neighbor_apply sra

  ON n.id = sra.neighbor_id

  AND sra.user_id = 'xxx'

  WHERE n.topic_status < 4

  AND n.topic_type <> 5

  注意:

  1)数据库编译器产生执行计划,决定着SQL的实际执行方式。但是编译器只是尽力服务,所有数据库的编译器都不是尽善尽美的。

  2)了解数据库编译器的特性,才能避规其短处,写出高性能的SQL语句。

  3)程序员在设计数据模型以及编写SQL语句时,要把算法的思想或意识带进来。

  4)编写复杂SQL语句要养成使用WITH语句的习惯,简洁且思路清晰的SQL语句也能减小数据库的负担。

  如果你想了解更多MySQL数据库知识,或者你想快速成为合格的Web前端工程师,可以来千锋郑州Web前端培训班。专业大牛讲师全程面授教学,以项目为驱动,让你快速系统的学好技能! 

相关产品

在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部