MySQL的一些基本语法

MySQL的一些基本语法

一:MySQL的一些执行顺序

  1. FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1
  2. JOIN table2 所以先是确定表,再确定关联条件
  3. .ON table1.column = table2.columu 确定表的绑定条件 由Temp1产生中间表Temp2
  4. WHERE 对中间表Temp2产生的结果进行过滤 产生中间表Temp3
  5. GROUP BY 对中间表Temp3进行分组,产生中间表Temp4
  6. HAVING 对分组后的记录进行聚合 产生中间表Temp5
  7. SELECT 对中间表Temp5进行列筛选,产生中间表 Temp6
  8. .DISTINCT 对中间表 Temp6进行去重,产生中间表 Temp7
  9. ORDER BY 对Temp7中的数据进行排序,产生中间表Temp8
  10. LIMIT 对中间表Temp8进行分页,产生中间表Temp9
    二:mysql索引失效场景
  11. 避免使用 select * 全表扫描会失效
  12. 模糊查询时 like “%刘” 导致全表扫描 百分号在前会失效 “刘%” (不一定会失效)
  13. 使用函数在索引列上或在条件上进行运算 where id-1=10 / where DATE(create_time) between “” and “”
  14. not in exist 都会导致索引失效
  15. B-TREE索引 is null 不会走 is not null 会走
  16. 复合索引 (time,name,age)第一种情况 time没有命中 name,age不会走索引(复合索引采用的是最左匹配原则)第二种情况 time命中索引但name没有命中 age还是不会走索引
  17. 使用 !=或<> 都会导致全表扫描 失效
  18. mysql在使用字符串时不加单引号 ‘’ 会失效 (因为mysql会在底层对其进行隐式的类型转换)where name=‘2000’; where name=2000;
    三:on和where的区别
  19. 在针对left join、right join 、union时,on和where产生的结果集是不同的, on是在连接时产生临时表的条件,假如 a left join b on a.id=b.id 此时on 返回的数据是满足a.id=b.id并且左表的数据都在的临时表temp1的数据;
  20. .inner join 返回的数据是相同的;
    四: inner join和from(自连接)查询的区别
    内连接是取左右两张表的交集形成一个新表。FROM并列两表后仍然还是两张表。如果还要对新表进行操作则要用内连接。从效率上看应该FROM并列查询比较快,因为不用形成新表。
    五:where和having的区别
  21. .第一种执行顺序上的区别 where 在分组之前 而having 在分组之后
  22. 第二种 having可以使用聚合函数(max min count() avg)而 where 语句不可以

六:常用函数使用方法

  1. IFNULL(列,0) 如果列等于空 返回0 相反 返回本身;
  2. IF(expr,v1,v2) 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
  3. CONCAT(a1,a2,a3…n) 字符串 a1,a2,a3 等多个字符串合并为一个字符串;
  4. . DATE(日期) 将时间转换成"yyyy-MM-dd";

七:.mysql变量的使用

1,变量的类型

MySQL中的存储过程类似java中的方法。既然如此,在存储过程中也同样可以使用变量。

mysql中的变量可以分为以下几个类型:局部变量,用户变量,会话变量,全局变量。
2,变量的定义及使用

1,局部变量

MySQL中的局部变量与java中的局部变量非常类似,java中的局部变量作用域是变量所在的方法,而MySQL中的局部变量作用域是所在的存储过程。

以下是局部变量的定义及赋值方式:声明用到了关键字
BEGIN
#Routine body goes here…
#变量的定义
declare var2 int(4);

#变量的赋值方式一:直接赋值
set var2 = 2;

#变量的赋值方式二:将查询结果赋值给变量
select u_id into var2 from users where u_name = 'zhangsan';

END

2,用户变量

用户变量类似于java中的成员变量,java中的成员变量使用对象访问,例如:user.getName();访问User类中的name成员变量,在不做修改的前提下,无论调用多少次该方法返回值都是一样的,成员变量的作用域是所在类。MySQL中的用户变量的作用域是当前连接,声明、赋值和查询都是用@符号。

BEGIN
#Routine body goes here…

#变量的赋值方式一:直接赋值,方式有以下两种。
set @var1 = 2;
set @var2 := 3;

#变量的赋值方式二:将查询结果赋值给变量
select u_id into @var3 from users where u_name = 'zhangsan';

END

3,会话变量

服务器为每个连接的客户端维护一系列会话变量。其作用域仅限于当前连接,即每个连接中的会话变量是独立的。以下是对于会话变量的相关操作:
复制代码

#显示所有的会话变量
show session variables;

#查询会话变量的值,方式有以下三种。
show variables like ‘%auto_increment_increment%’; #查询变量值的通用方式
select @@auto_increment_increment; #使用@@方式查询
select @@session.auto_increment_increment; #使用@@session.的方式,类似于java中对象名.变量名
select @@local.auto_increment_increment; #使用@@local.的方式,类似于java中对象名.变量名

#设置会话变量的值,方式有以下三种。
set auto_increment_increment=1; #直接设置
set session auto_increment_increment=1; #使用session关键字,设置选定的范围
set @@session.auto_increment_increment=1; #使用@@session.的方式,类似于java中对象名.变量名
set @@local.auto_increment_increment=1; #使用@@local.的方式,类似于java中对象名.变量名

4,全局变量

当服务启动时,它将所有全局变量初始化为默认值。其作用域为server的整个生命周期。

#显示所有的全局变量
show global variables;

#查询全局变量的值的两种方式
show variables like ‘%sql_warnings%’; #查询变量值的通用方式
select @@global.sql_warnings; #使用@@global.的方式,类似于java中对象名.变量名

#设置全局变量的值的两种方式
set sql_warnings=FALSE; #直接设置
set global sql_warnings=FALSE; #使用global关键字,设置选定的范围,最好加上global
set @@global.sql_warnings=OFF; #使用@@global.的方式,类似于java中对象名.变量名

3,小的注意事项

declare声明变量必须在存储过程的最开始,否则就会出错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值