mysql细节

Posted root_zhb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql细节相关的知识,希望对你有一定的参考价值。

case when then 用法 和null 的判断

SELECT id ,(CASE   WHEN sex= ''  THEN 'bbbbb'
                   WHEN sex IS NULL THEN 'aaaaa' 
                   ELSE sex END  ) AS sex FROM aa;

case when 判断条件最好连用,避免出现不必要的问题(例如 case xx when is null 无法使用 )

Sql子查询Not In 无结果

select * from ITEM where item_id not in (select parent_item_id from ITEM )

查询效果无任何匹配值
原因:not in 解析后的执行语句是(id!=1 and id!=2 and id!=null)
空值存在将会导致条件整体失败,所以无任何匹配数值。
解决:排除空值

select * from ITEM where item_id not in (select parent_item_id from ITEM where parent_item_id is not null)

not in 是and条件,不能有null值。

MySQL实现差集(Minus)和交集(Intersect)

https://www.linuxidc.com/Linux/2014-06/103551.htm
尽量用子查询,and 实现交集,not in 实现差集

TRUNCATE()函数

  • TRUNCATE(X,D) 是MySQL自带的一个系统函数。
  • 其中,X是数值,D是保留小数的位数。
  • 其作用就是按照小数位数,进行数值截取(此处的截取是按保留位数直接进行截取,没有四舍五入)。

规则:

  • 当 D 大于0,是对数值 X 的小数位数进行操作;
  • 当 D 等于0,是将数值 X 的小数部分去除,只保留整数部分;
  • 当 D 小于0,是将数值 X 的小数部分去除,并将整数部分按照 D 指定位数,用 0 替换。
SELECT TRUNCATE(123.4567, 2);   # 123.45
SELECT TRUNCATE(123.4567, 0);   # 123
SELECT TRUNCATE(123.4567, -2);  # 100
SELECT TRUNCATE(123.4567, -3);  # 0

and 和 or 同时使用

and的优先级是高于or的, 且是右先运算, 以where a=0 or b=0 and c=0为例,

先运行 b=0 and c=0 条件, 取出结果,

然后运行a=0条件, 取出结果, 并合并结果.

!!!删除注意

删除之前使用对应的select语句,查看是否是需要更新的数据。

数据更新

有专门的表
(自增主键 创建人 创建时间 更新人,更新时间)

复杂查询思路

遇到查询多列的复杂sql,看是否可以拆解,比如分为几部分,然后组合

count(1)、count(*)和count(字段名)

count(1)和count(*):都为统计所有记录数,包括null
count(字段):统计字段列的行数,不包括null

  • 列名为主键,count(列名)会比count(1)快
  • 列名不为主键,count(1)会比count(列名)快
  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
  • 如果有主键,则 select count(主键)的执行效率是最优的
    如果表只有一个字段,则 select count(*)最优。

MySQL的几种join方法

以上是关于mysql细节的主要内容,如果未能解决你的问题,请参考以下文章

部分代码片段

linux中怎么查看mysql数据库版本

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

使用 json rereiver php mysql 在片段中填充列表视图