当前位置: 代码迷 >> 综合 >> MySql语句干货记录
  详细解决方案

MySql语句干货记录

热度:4   发布时间:2023-11-01 03:19:13.0

目录

group by

1、分组字段不能使用字段的重命名进行分组

order by

1、order by排序字段若含有()特殊字符,会报错

limit

1、limit 5每次返回的数据不一样

函数

1、CAST()和CONVERT()



group by

1、分组字段不能使用字段的重命名进行分组

原因:

mysql5.7.5版本之后,对语法的校验更加严格,group by不能使用select的重命名字段

解决方法:

-- 查看 sql_mode
SELECT @@sql_mode;

执行结果:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

可以重新设置:

set GLOBAL sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

order by

1、order by排序字段若含有()特殊字符,会报错

原因:

mysql会将()识别为一个function,导致我发进行排序

解决方法:

使用反单引号`字段名`,即可解决

limit

1、limit 5每次返回的数据不一样

原因有两点:

a、数据主键不是自增有序的

b、相同的sql语句,满足筛选条件的数据超过5条,同一数据库连接下,返回的数据是相同的。若关闭连接,重新建立数据库连接并查询(关闭navicat,再打开查询),那么返回的数据可能会发生改变,是从满足筛选条件的数据中随机出来的5条数据

函数

1、CAST()和CONVERT()

CAST(expor AS type)和CONVERT(value, type)两个函数都用作类型转换,type的取值有以下几种:

  • 字符型:CHART(),可带参数
  • 时间:DATE
  • 日期时间:DATETIME
  • 浮点型:DECIMAL
  • 整数:SIGNED
  • 无符号整数:UNSEGNED
  相关解决方案