MYSQL基础

1. 注意

1. is
   is 关键字只能给 NULL 用  is null 判断是否
   为空


2. DESTINCK
   去充关键字,使用该关键字可以去除重复项


3. group by,order by
   支持字段和函数
   分组查询和排序的根据值需在查询列表中出现
   排序查询desc降序,asc升序

4. in
   in关键字用于判断是否包含
   where col in(a,b,...)


5. between num and  num
   用于判断区间,小值在前,大值在后


6. desc
   desc table 
   显示表结构


7.数据类型
 有符号无符号数据类型的值严格控制,否则报错
 日期类型、字符类型的值需要用单引号括起来


8. 查看索引表
   SHOW INDEX FROM表名
   默认有主键 外键 唯一


9. into使用
   into可以给在查询时变量或字段赋值
   select 字段1 into 变量1 ,字段1 into 变量1 ,...
   select 字段1,字段2 , ... into 变量1,变量2, ...


10. delimiter 结束标记
    delimiter 后面的所有字符都会被设置为结束标记
    自定义mysql的结束标记,默认为分号
    在创建存储过程时会使用,因为存储过程中的sql
    语句必须要用分号,分号又会结束存储过程,所以
    需要修改,修改是全局的不夸重启,存储过程中使
    用完可以改回来


11. 存储过程
    存储过程不能修改,想要实现修改功能需要删除
    原有存储过程,添加修改后存储过程

12. char(m),varchar(m)
		当中的m受字符集影响,不同的字符集的长度不同,utf8mb4一个字符四个字节

13. length()和 char_length()
		获取字符长度使用char_length(),应为length计算的是字节长度,字节受字符集影响,char_lenght计算的是字符长度

14. truncate 表名
		删除表内所有数据,比delete语句快,但是不能删除带有外键约束的表

2. 函数

2.1 判断

1. IFNULL(a,b)
 判断 a 是否为空,如果为空就返回 b 如果不为空就
 返回 a

2.2 字符函数

1. CONCAT(a,b,...)
   连接字符串 a.b 或者跟多


2. UPPER(a)
   将字符串 a 转化成大写


3. LOWER(a)
   将 a 转化为小写


4. Substr(str,index) Substring(str,index)
   截取字符串,从 index 位置开始


5. Substr(str,sta,count)
   Substring(str,sta,count)
   截取字符串,从 sta 位置(包含前一位 sta),截 
   count(长度,或个数)个字符,这里的 sta 为光标位
   置


6. INSTR(str,substr)
   返回 substr 在 str 的起始位置


7. TRIM(str)
   去掉 str 中前面的空格


8. TRIM(a FROM str)
   去掉 str 前面的 a


9. LPAD(str,len,padstr)
   str 不足 len 长度,用 padstr 左补齐,str>len 左截>取 str 为 len


10. RPAD(str,len,padstr)
   str 不足 len 长度,用 padstr 右补齐,str>len 右截>取 str 为 len


11. REPLACE(str,a,b)
   将 str 中的 a 替换成 b

12. cast('abc',binary);
   将char的值以二进制显示

2.3 数学函数

1. ROUND(a)
   四舍五入 a

2. ROUND(a,len)
   四舍五入,保留 len 位,不递增进位,例如 1.445 保留 1 位,得 1.4
3. CEIL(a)
   向上取证,即取≥a 的最小整数(1.0 取 1,1.1 取 1)

4. FLOOR(a)
   向下取证,取≤a 的最大整数(1.0 取 1,1.9 取 1)
分正负


5. TRUNCATE(a,len)
  直接将 a 截取保存 len 位小数(1.44,1 得 1.4)
  

6. rand()*n
	随机数

2.4 日期函数

在这里插入图片描述

1. NOW()
  返回当前日期+时间


2. CURDATE()
   返回当前日期,不包含时间


3. CURTIME()
   返回当前时间,不包含日期


4. YEAR(Date)、MONTH(Date)等
   获取指定部分,例如年月日时分秒(year(now()))


5. str_to_date(datestr,dateformat) 
  将日期格式字符转换为日期格式,datestr 为日期字 符串,dateformat 为该串的格式(str_to_date('9-13.1999','%m-%d.%Y))
  
  
6. date_formate(date,dateformat)  
  将日期格式转换为指定的日期字符串


7. DATEDIFF(date1,date2)
   求两个日期相差天数

2.5 流程控制函数

1. IF(expr1,expr2,expr3)函数
   expr1条件表达式,真返回expr2,假返回expr3,用于任何地方


2.  case  字段 | 表达式 | 变量
   when 常量1 then 要显示的值或语句;
   when 常量2 then 要显示的值或语句;
   ...
   end case;
   类似于switch case

3. case
   when 条件1  then  要显示的值或语句;
   when 条件1  then  要显示的值或语句;
   ...
   end
   相当于于多重if

2.6 分组函数

1. sum()求和,只支持数值型
2. avg()平均值,只支持数值型
3. max()最大,支持任何类型
4. min()最小,支持任何类型
5. count()计数,支持非空的值,求个数,参数可以为
常量值
   MyISAMB:count(*)效率最高
   InnoDB:参数为常量值的效率高于字段,因为字段
          要考虑null,*=常量值
 所有分组函数忽略null,支持distinct去重关键字

3. 查询(DQL)

3.1分组查询

当分组查询需要在分组后筛选需要用HAVING关
键字 ,分组函数查询的值为筛选条件肯定放在
HAVING关键字后
     select count(*),colname 
     from table
     group by colname
     HAVING count(*) > 2
   查询按照colname分组的记录,每一组的记录条数>2的记录

3.2连接查询

两张表联合查询时,没有有效条件时会出想笛卡尔
乘积现象,即记录条数为表一条数*表二条数
   
1. 分类
   按年代
   sql92标准:仅支持内连接
   sql99标准(推荐):支持内连接+外链接(左+右)+交
   叉
   按功能
   内连接:
     等值连接
     非等值连接
     自连接
   外链接:
     左外链接 
     右外连接 
     全外连接
   交叉连接


2. sql92标准
   等值连接
     select t1.*,t2.*
     from t1,t2
     where t1.col=t2.col;
   可分组,可排序,可添加约束
   
   非等值连接
     select t1.*,t2.*
     from t1,t2
     where t1.col [<,!=,>,between and] t2.col;
   可分组,可排序,可添加约束

   自连接
   相当于等值连接,有特殊值才可用,常用语子父
   级,上下级等同类依赖
     select t1.*,t2.*
     from t1 as t1 ,t1as t2
     where t1.col  =   t2.col;
   可分组,可排序,可添加约束


3. sql99标准
     select 查询列表
     from table1 别名 [连接类型]
     join table2  别名
     on 连接条件
     ~where 约束条件
     ~gropy by 分组条件
     ~HAVING 分组后筛选条件
     ~order by 排序条件 排序类型
     ~标注为可选可不选

   内链接
   用于查询有交集部分,没有不显示
     select 查询列表
     from table1 别名 
     inner join table2  别名
     on 连接条件
     ~where 约束条件
     ~gropy by 分组条件
     ~HAVING 分组后筛选条件
     ~order by 排序条件 排序类型
     ~标注为可选可不选
   等值连接与非等值连接的差别在于连接条件判断
   自连接用于子父级,上下级等同类依赖关系
   
   外连接:左连接、右链接
   用于查询一个表有,另一个表没有,没有返回null
   特点:
     外连接的查询结果为主表中的所有记录
       如果从表有匹配值,显示匹配值
       如果从表没有匹配值,显示null
     左外连接:left join 左为主表
     右外连接:right join 右边为主表
   左外和右外交换两个表的顺序可以实现相同效果
     select 查询列表
     from table1 别名 
     [left,right] join table2  别名
     on 连接条件
     ~where 约束条件
     ~gropy by 分组条件
     ~HAVING 分组后筛选条件
     ~order by 排序条件 排序类型
     ~标注为可选可不选

   全外连接
   不仅能查交集,从表没在主表中出现的记录也能查
   主表有从表没有不显示
     select 查询列表
     from table1 别名 
     FULL OUTER join table2  别名
     on 连接条件
     ~where 约束条件
     ~gropy by 分组条件
     ~HAVING 分组后筛选条件
     ~order by 排序条件 排序类型
     ~标注为可选可不选

   交叉连接
   笛卡尔乘积表,
     select 查询列表
     from table1 别名 
     CROSS join table2  别名
     on 连接条件
     ~where 约束条件
     ~gropy by 分组条件
     ~HAVING 分组后筛选条件
     ~order by 排序条件 排序类型
     ~标注为可选可不选

3.3 子查询

出现在其他语句的select语句,叫做子查询或者内查询
可以在增删改查中使用
1. 分类
   按查询位置
     select | update | delete后
       仅支持标量子查询
     from后
       支持表子查
     where或having后
       标量子查询(主要)
       列子查询(主要)
       行子查询
     exists后(相关子查询)
   按结果集的行列数
     标量子查询(结果只有一行一列)
     行子查询(一行多列)
     列子查询(一列多行)
     表子查询(多行多列)

3.4 分页查询

     select 查询列表
     from 表名1 别名 
     ~连接类型 join 表名2  别名
     ~on 连接条件
     ~where 约束条件
     ~gropy by 分组条件
     ~HAVING 分组后筛选条件
     ~order by 排序条件 排序类型
     limit offset(起始索引,从0开始),size(每一页条数)
     ~标注为可选可不
     
   查第n页,条数为size
   limit  (page-1)*size

3.5 联合查询

union  联合 合并
     select t1.*,t2.*
     from t1 as t1 ,t1 as t2
     where t1.col  =   t2.col
     union [all]  select t1.*,t2.*
                 from t1 as t1 ,t1as t2
                 where t1.col  =   t2.col
                 union ...
                 union...
                 ...
应用场景
   要查询的结果来自多个表,且多个表没有直接的链接关系
注意事项
   要求多条查询语句的插叙列数要一致
   并且每条列数类型要一样
   它会去除重复项,想要保存添加all关键字
   

3.6 查询系统信息

查询系统相关信息
(1)select database():查看数据库名需进入数据库
(2)select version():查看数据库版本
(3)select now():查看数据库当前时间
(4)show databases;查看所有数据库

4.DML(数据操作语言)

ps:SQL语句从from开始加载的

4.1插入语句

 insert [into] 表明(列名1,列名2,列名3,...)
 values(值1,值2,值3,...),
 (值1,值2,值3,...),...;
 确保插入的值和列的类型保持一致,数量一致,不能为null的值必须有值,支持插入多行,逗号隔开,支持子查询,能实现多行
 insert 表名
 set 列1=值1,列2=值2,...
确保插入的值和列的类型保持一致,不支持多行

4.2修改语句

 update 表名
 set 列2=新值,列2=新值,...
 where 筛选条件
添加筛选条件可实现多行修改

 update 表1 别名
 inner | left | right join 表2 别名
 on 连接条件
 set 列=值,...
 where 筛选条件
 多表修改

4.3 删除语句

单表删除
 delete from 表名 where 筛选条件

多表删除
 sql92
   delete 表名1 别名,表2 别名,...
   from 表1,表二,...
   where 连接条件
   
  sql99
   delete 表名1 别名,表2 别名...
   from 表1,表二,...
   inner | left | right join 表2 别名
   on 连接条件
   where 连接条件

 truncate table 表名;
 不允许加where,整表删除,清空,可清空自增


4.4 DDL(库和表的管理)

1.库的管理
 创建数据库
 creat database [if not exists] 库名;


 修改数据库名
 rename database 库名 to 新库名

 更改字符集
 alter darabase 库名 character set 字符集

 删除库
 drop database if exists  books

2.表的管理
 ALTER TABLE 表名
 ADD | DROP | MODIFY | CHANGE
 COLUMN 列名 [列类型 约束];

 显示表结构
 desc 表名

 创建新表
   creat table 表名(
   列名 类型 [(长度) 约束],
   列名 类型 [(长度) 约束],
   列名 类型 [(长度) 约束])
   注:[]该括号里面为可选值

 修改列名
   ALTER TABLE 表名 
   CHANGE COLUMN 列名 新列名 类型;
 

 添加新列
    ALTER TABLE 表名
    ADD COLUMN 列名 DOUBLE:


 删除列
   ALTER TABLE 表名 
   DROP COLUMN [IF EXISTS] 列名;


 修改表名
    ALTER TABLE 表名 RENAME TO 新表名:


 删除表
   DROP TABLE [IF EXISTS] 表名;
 

 复制表,仅复制表结构到新表
   CREATE TABLE 新表名 LIKE 目标表名;
 
 复制表结构和数据到新表,筛选列表可以实现复制指定数据,查询列表实现指定列,可以是 *号,只要结构不要数据筛选条件为假即可,例如false,0,1=2
   CREATE TABLE 新表名 
   	SELECT 查询列表
  	FROM 目标表名
   	WHERE 筛选条件;
  



   ALTER TABLE 表名 
   DROP 约束条件(唯一约束用INDEX)
   删除外键时后面需要加 索引表中外键索引名

3.标识列(自增长列)
可以不用手动插入值,系统提供默认色序列值
 在约束添加后添加AUTO_INCREMENT关键字即可,
 插入时给null即可,也可以赋值,必须跟key搭配,一
 个表至多一个,类型必须是数值型,修改时支持修改
 约束的写
  设置步长
  SET auto_increment_incrwment=步长值
 

5.约束(数据完整性)

1.常见约束
一种限制,用于限制表中数据,为了保证表中数据的准确性和可靠性,check约束mysql不支持,但不报错
 NOT NULL      非空约束 | 不能为空 |
 DEFAULT       默认约束 | 设置默认值
 PRIMARY KEY   主键约束 | 不能为空 唯一性
 UNIQUE        唯一约束 | 唯一性 可以为空
 CHECK         检查约束 | 限制范围
 FOREING KEY   外键约束 | 限制两个表的关系
 外键约束需要加 REFERWNCES 表名(外键) 外键约束两个列名字可以不同,但是类型需要相同,被引用的键必须是个key,例如主键、外键、唯一键删除时先删从表,才能删除主表PRIMARY KEY(列1,列2)组合主键


 列级约束
   六大约束语法上都支持


 表级约束
   除了非空,默认,其他都支持
   creat table 表名(
     列名 类型 [(长度) 约束],
     列名 类型 [(长度) 约束],
     列名 类型 [(长度) 约束],
     CONSTRAINT 约束名 约束类型(列),
     CONSTRAINT 约束名 约束类型(列),
     CONSTRAINT 约束名 约束类型(列),
     ... ,
     ...
     [该括号里面为可选值]
 mysql主键的约束名不可以自定义,但写了不报错,其他不写的时候默认有约束名

表姐约束可以添加联合主键,列级约束不行

 修改表时添加约束修改约束
   列级约束
     ALTER TABLE 表名
     MODIFY | ADD
     COLUMN 列名 类型 约束类型


   表级约束
     ALTER TABLE 表名
     ADD | MODIFY
     约束类型(列名)
     用ADD关键字可以设置约束名
     ADD CONSTRINT 约束名


 删除约束
   ALTER TABLE 表名 
   MODIFY COLUMN 列名 类型;
  

6.事务管理

6.1 TCL(事物控制语言)

Transaction Control Language
一个或一组sql语句组成一个执行单元,要么全执行,
要么都不执行,发生错误会回滚

6.2 事物的ACID属性

1.原子性(Atonmicity)
 事务是一个不可分割的工作单位,事务的操作要么都
 发生,要么都不发生
2.一致性(Consistency)
 事务必须使数据库从一个一致状态转为另一个一致状
 态
3.隔离性(Isolation)
 事务不被其他事务干扰,并发执行时是隔离的,首隔
 离机制影响
4.持久性(Duarbility)
 事务一但提交,对数据库中数据的改变是永久的,不
 可撤销

6.3 事务的创建

1.隐式事务
 事务没有明显的开始和结束标记,比如insert updata  
 delete语句,他们的autocommit(自动提交)是开启的


2.显示事务
 具有明显的开始和结束的标记
 前提必须先设置自动提交为禁用
 SET AUTOCOMMIT=0;每一次都要设置
 开始一个事务
 SET AUTOCOMMIT=0;
 [START TRANSACTION;]可选
 语句1;
 语句2;
 ...;
 commit;提交  | rollback;回滚

6.4 事务并发

同时运行多个事务,访问相同的数据时,没有采取必要
的隔离机制,导致的并发问题 
1.脏读
 对于两个事务T1,T2,T1读取了已经被T2更新但还没
 有被提交的数据时,T2回滚,T1的数据就是无效的
2.不可重复读
 对于两个事务T1,T2,T1读取了一个字段,T2更新
 了,T1再次读取时就不同了
3.幻读
 对于两个事务T1,T2,T1读取了一个字段,T2插入了一
 些数据,T1再次读取会多出几行


隔离级别
MYSQL有四中隔离级别,默认为REPEATABLE READ
1.读未提交(Read uncommitted)
 这种事务隔离级别下,select语句不加锁。
 此时,可能读取到不一致的数据,即“读脏 ”。这
 是并发最高,一致性最差的隔离级别。
2.读已提交(Read committed):
 可避免 脏读 的发生。
 在互联网大数据量,高并发量的场景下,几乎 不会
 使用 上述两种隔离级别。
3.可重复读(Repeatable read)MySql默认隔离级别。
 可避免 脏读 、不可重复读 的发生。
4.串行化(Serializable ):
 可避免 脏读、不可重复读、幻读 的发生。

设置当前数据库隔离级别
set session transection isolation level 隔离级别;

设置全局数据库隔离级别
set global  transection isolation level 隔离级别;
查看隔离级别
select @@tx_isolation;
设置回滚点
savepoint 回滚点名;
回到回滚点
rollback 回滚点名;

6.5 delete 与 truncate在事务中的区别

delete支持回滚,truncate不支持

7 视图

7.1介绍

虚拟表,和普通表一样
mysql5.1出现的新特性,是通过表动态生成的数据
一般用于复杂的查询

7.2 视图的创建与使用

 create view 视图名
 AS
 select 查询列表
 from table1 别名 [连接类型]
 join table2  别名
 on 连接条件
 ~where 约束条件
 ~gropy by 分组条件
 ~HAVING 分组后筛选条件
 ~order by 排序条件 排序类型
 ~标注为可选可不选 

查看视图数据
 select * from 视图名;

7.3 视图的修改

方式一
 create or repleace view 视图名
 AS
 查询语句

方式二
 alter view 视图名
 as
 查询语句;

7.4 视图的删除

drop view 视图名1,视图名2,...:

7.5 查看视图信息

方式一
 desc 视图名;
方式二
 show create view 视图名;

7.5 视图的更新(更改数据)

1. 插入数据(同步原始表)
 insert into 视图名 values(字段1,字段2,...);


2. 更改(同步原式表)
 update 视图名 set 字段1=值,字段2=值2,...;


3. 删除数据(同步原式表)
 delete from 视图名 where 筛选条件;

具备以下特点的视图不允许增删改
 包含关键字 分组函数,distincat,having,union [all]
 常量视图
 select语句中有包含子查询
 join
 from 一个不能更新的视图
 where子句的子查询引用了from子句中的表

7.6 对比视图和表

视图没有占用物理空间(占用的仅仅是逻辑,并没有为
保存的数据开辟内存),表占用,视图一般不支持更新数据(指的是crud操作),表支持

8 变量

8.1 系统变量

1.说明:
 变量由系统提供的,不是用户自定义,属于服务
 器层面
2.使用的语法:
 查看所有的系统变量
   查看会话 | 全局 变量,session为默认可省略
   show ~session | global variables;


 查看满足条件的部分变量
   show ~session | global variables like '%char%';


 查看指定的某个系统变量的值
   show ~@@session | @@global .系统变量名


 为某个系统变量赋值
   方式一
   set global | ~session 系统变量名=值;
   方式二
   set @@global | ~@@session. 系统变量名=值;

3.注意:
 如果是全局变量需要加global,如果是会话变量可以加
 session或者什么都不加
 全局变量可以跨连接,但是不能跨重启,mysql重启
 会恢复默认值,针对于所有会话
 会话变量仅仅针对于当前会话
 

8.2 自定义变量

1.说明:
 变量是用户自定义的,不是由系统提供的
2.使用步骤:
 声明
 赋值
 使用

3.用户变量
 针对于当前会话,相当会话变量,可以放在任何地
 方,可以在begin...end里面也可以在外面
   声明并初始化(赋值操作符 =或 :=)
     set @用户变量名 =  值;
     set @用户变量名 := 值;
     select @用户变量名 := 值;
   赋值
     方式一
     set @用户变量名 =  值;
     set @用户变量名 := 值;
     select @用户变量名 := 值;
     方式二
     select 字段 into @用户变量名 from 表;
   使用用户变量
     select @用户变量名 ;


4.局部变量
 仅仅用在begin...end里面,并且要在begin下面第一
 句,定义事需要限定类型,可选默认值
   声明
     declare 变量名 类型;
     declare 变量名 类型 default 值;
   赋值(相比于用户变量,没有@符号)
      方式一
     set 变量名 =  值;
     set 变量名 := 值;
     select 变量名 := 值;
     方式二
     select 字段 into 变量名 from 表;

9 存储过程

9.1 创建与使用

1.含义:
   类似于java中的方法
 一组预先编译好的sql语句的集合,可理解与批处理
 语句
2.好处:
 提高代码的复用性
 简化操作
 减少了编译次数并且减少了和数据库的连接次数,
 提高了效率


3.创建语法
 delimiter 结束标记
 create procedure 存储过程名(参数列表)
 begin
   存储过程体(一组合法的sql语句)
 end
 结束标记


 参数列表
   参数模式 参数名 参数类型,...
   参数模式:
     in:该参数可以作为输入该参数调用时需传值
     out:该参数可以作为输出,可以作为返回值
     inout:既可以作为输入,又可以作为输出

4.注意:
 如果存储过程体仅仅只有一句话,begin end可以省
 略,存储过程体每一条sql语句结束必须要用分号结
 尾,存储过程的结尾可以使用delimiter重新设置
   delimiter 结束标记
   存储过程
   结束标记

5.调用:
 空参
  /*修改结束符*/
   delimiter 结束标记
   create procedure
   存储过程名(inout a int,inout b int)
   begin
     sql集合
   end
   结束标记
   /*将结束符修改回分号*/
   delimiter ;
   /*定义变量作为参数也接受返回值*/
   cal 存储过程名();
   空参存储过程会按顺序执行sql集合,能看到最后一
   条sql的结果,最后一个为查询就显示查询结果,插
   入修改删除就打印相应的结果,相当与控制台执行
   sql集合
 
 带 in参数模式
   call 存储过程名(in a int);
   跟带空参一样
 

 带out参数模式
   带inout参数的存储过程
   /*修改结束符*/
   delimiter 结束标记
   create procedure
   存储过程名(in a int,out b int)
   begin
     set b=a+10;
   end
   结束标记
   /*将结束符修改回分号*/
   delimiter ;
   /*定义变量作为参数也接受返回值*/
   set @n=10;
   set @m=20;
   /*调用存储过程*/
   cal 存储过程名(@n,@m);
   /*查看变量*/
   select @m:

 带inout参数的存储过程
   /*修改结束符*/
   delimiter 结束标记
   create procedure
   存储过程名(inout a int,inout b int)
   begin
     set a=a+b;
     set b=b*2;
   end
   结束标记
   /*将结束符修改回分号*/
   delimiter ;
   /*定义变量作为参数也接受返回值*/
   set @n=10;
   set @m=20;
   /*调用存储过程*/
   cal 存储过程名(@n,@m);
   /*查看变量*/
   select @n,@m:
   

6.存储过程的删除
 语法
   drop procedure 存储过程名;
 只能删除一个
 
7.存储过程查看结构
   show create procedure 存储过程名;

存储过程不支持修改,想要修改只能删了重新添加

10 函数(自定义函数)

10.1

1.含义:
 一组预先编译好的SQL语句集合
2.优点:
 1.提高代码的重用性
 2.简化操作
 3.减少了编译次数并且减少了和数据库服务器的连接次
 数,提高了效率 

3.跟存储过程的区别  
 函数只能有一个返回,适合做处理数据后返回一个结果
 

4.创建语法
   CREATE FUNCTION 函数名(参数列表) 
   RETURNS 返回类型
   BEGIN
     函数体
   END 
 注意:
   参数列表:
     参数名 参数类型
 
   函数体:
     肯定会有return语句,如果没有会报错,如果
     return语句没有放在函数体的最后也不报错,但不
     建议return值
 
   函数体中只有仅有一句话,则可以省略begin end
   使用 delimiter语句可以设置结束标记
   
 5.调用语法
   SELECT 函数名(参数列表)
   

 6.查看函数
   SHOW CREATE FUNCTION 函数名;
   
 7.删除函数
   DROP FUNCTION 函数名;

11 流程结构

11.1 分支结构

1.if函数
 功能:实现双分支
 语法:IF(表达式1,表达水2,表达式3)
 执行顺序;
   如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值,用于任何地方
   
   

2.if结构
 if 条件 then 语句;
 elseif 条件 then 语句;
 ...
 end if;
 只能用在begin end 中,else可省略
 

3. case  字段 | 表达式 | 变量
   when 常量1 then 要显示的值或语句;
   when 常量2 then 要显示的值或语句;
   ...
   end case;
   相当于switch case

4. case
   when 条件1  then  要显示的值或语句;
   when 条件1  then  要显示的值或语句;
   ...
   end
   相当于于多重if

10.2 循环结构

循环控制:只能在begin end 中
  iterate类似于continue,leave类似于break;
1.while
	~名字
  while 循环条件 do
  	循环体;
  end while 名字
 

2.loop
	~名字:
	loop
		循环体
	end loop 名字
	模拟死循环
	

3.repeat
  ~名字:
  repeat
  	循环体
  until 结束循环条件;
  end repeat !名字;
  类似于do while,先执行后判断
leave | iterate 名字;实现所控制的循环体的退出中断

12.常用show命令

--MySQL 常用show命令
show tables或show tables from database_name; -- 显示当前数据库中所有表的名称。
show databases; -- 显示mysql中所有数据库的名称。
show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。
show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。
show index from table_name; -- 显示表的索引。
show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。
show variables; -- 显示系统变量的名称和值。
show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
show privileges; -- 显示服务器所支持的不同权限。
show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
show engies; -- 显示安装以后可用的存储引擎和默认引擎。
show innodb status; -- 显示innoDB存储引擎的状态。
show logs; -- 显示BDB存储引擎的日志。
show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
show errors; -- 只显示最后一个执行语句所产生的错误。
show [storage] engines; --显示安装后的可用存储引擎和默认引擎。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值