MySqlt一一05、TCL语言

TCL 语言

一、含义

事务
事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不 执行

二、特点(ACID)

A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行
C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态 I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的
D 持久性:一个事务一旦提交了,则永久的持久化到本地

三、事务的使用步骤 ★ 了解:

隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交, 比如insert、update、delete
显式事务:具有明显的开启和结束 使用显式事务:
1 开启事务
set autocommit=0;
start transaction;#可以省略
2 编写一组逻辑sql语句 注意:sql语句支持的是insert、update、delete
设置回滚点: savepoint 回滚点名;
3 结束事务
提交:commit;
回滚:rollback; 回滚到指定的地方:rollback to 回滚点名;

四、并发事务

1、事务的并发问题是如何发生的?
多个事务 同时 操作 同一个数据库的相同数据时
2、并发问题都有哪些?
脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更 新”的数据
不可重复读:一个事务多次读取,结果不一样

幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务 “插入”的数据
其他
3、如何解决并发问题 通过设置隔离级别来解决并发问题
4、隔离级别
脏读 read uncommitted:读未提交
read committed:读已提交
repeatable read:可重复读
serializable:串行化
一、含义
不可重复读 幻读
× × ×
√ × ×
√ √ ×
√ √ √
视图
mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行 时动态生成。
好处:
1、简化sql语句 2、提高了sql的重用性 3、保护基表的数据,提高了安全性
二、创建

create view 视图名 as

查询语句;
三、修改 方式一:

create or replace view 视图名
as查询语句; 

方式二:

alter view 视图名 as
查询语句

四、删除

drop view 视图1,视图2,...;

五、查看

desc 视图名;
show create view 视图名;

六、使用 1.插入
insert 2.修改 update 3.删除 delete 4.查看 select
注意:视图一般用于查询的,而不是更新的,所以具备以下特点的视图都不允许更新
1包含分组函数、group by、distinct、having、union、 2join
3常量视图
4where后的子查询用到了from中的表 5用到了不可更新的视图
七、视图和表的对比
关键字 是否占用物理空间 使用

视图 view 表 table
分类 一、系统变量
占用较小,只保存sql逻辑 一般用于查询 保存实际的数据 增删改查
变量
说明:变量由系统提供的,不用自定义 语法:
1查看系统变量
show 【global|session 】variables like ‘’; 如果没有显式声明global还 是session,则默认是session
2查看指定的系统变量的值

select @@【global|session】.变量名; 如果没有显式声明global还是 session,则默认是session
3为系统变量赋值
方式一:

set 【global|session 】 变量名=值; 如果没有显式声明global还是 session,则默认是session
方式二:
set @@global.变量名=值; set @@变量名=值;
1、全局变量
服务器层面上的,必须拥有super权限才能为系统变量赋值,作用域为整个服务 器,也就是针对于所有连接(会话)有效
2、会话变量 服务器为每一个连接的客户端都提供了系统变量,作用域为当前的连接(会话)
二、自定义变量 说明:
1、用户变量 作用域:针对于当前连接(会话)生效 位置:begin end里面,也可以放在外面 使用:
1声明并赋值:
set @变量名=值;或 set @变量名:=值;或 select @变量名:=值;
2更新值 方式一:
set @变量名=值;或 set @变量名:=值;或 select @变量名:=值;
方式二:

select xx into @变量名 from;

3使用
select @变量名;
2、局部变量
作用域:仅仅在定义它的begin end中有效 位置:只能放在begin end中,而且只能放在第一句 使用:
1 声明
declare 变量名 类型 【default 值】; 2赋值或更新
方式一:

set 变量名=;set 变量名:=;select @变量名:=; 方式二:
select xx into 变量名 from;

3使用
select 变量名;
一、创建 ★
存储过程
create procedure 存储过程名(参数模式 参数名 参数类型) begin
存储过程体 end
注意: 1.参数模式:in、out、inout,其中in可以省略 2.存储过程体的每一条sql语句都需要用分号结尾
二、调用
call 存储过程名(实参列表) 举例:
调用in模式的参数:call sp1(‘值’);
调用out模式的参数:set @name; call sp1(@name);select @name;
调用inout模式的参数:set @name=值; call sp1(@name); select @name; 三、查看
show create procedure 存储过程名;
四、删除
drop procedure 存储过程名;
函数
一、创建

create function 函数名(参数名 参数类型) returns 返回类型 begin
函数体 end

注意:函数体中肯定需要有return语句
二、调用

select 函数名(实参列表); 

三、查看

show create function 函数名; 

四、删除

drop function 函数名;

特点: 1、if函数
功能:实现简单双分支 语法: if(条件,值1,值2)
分支结构
位置:
可以作为表达式放在任何位置
2、case结构
功能:实现多分支 语法1:

case 表达式或字段 when1 then 语句1; when2 then 语句2; ..
else 语句n; end [case];

语法2: case

when 条件1 then 语句1; when 条件2 then 语句2; ..
else 语句n;
end [case];

位置:
可以放在任何位置,
如果放在begin end 外面,作为表达式结合着其他语句使用 如果放在begin end 里面,一般作为独立的语句使用
3、if结构
功能:实现多分支
语法:
if 条件1 then 语句1; elseif 条件2 then 语句2; …
else 语句n;
end if;
位置:
只能放在begin end中
位置:
只能放在begin end中
循环结构
特点:都能实现循环结构
对比:
1这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或 iterate)则必须添加名称
2
loop 一般用于实现简单的死循环
while 先判断后执行
repeat 先执行后判断,无条件至少执行一次
1、while 语法:

【名称:】while 循环条件 do 循环体
end while 【名称】;

2、loop 语法:
【名称:】loop 循环体
end loop 【名称】;
3、repeat 语法:

【名称:】repeat 循环体 until 结束条件

end repeat 【名称】;
二、循环控制语句
leave:类似于break,用于跳出所在的循环 iterate:类似于continue,用于结束本次循环,继续下一次

猜你喜欢

转载自blog.csdn.net/weixin_44391817/article/details/128034036
TCL