MySQL第三章-TCL

it2025-01-26  37

TCL

1 事务的介绍1.1 事务的属性1.2 事务的演示步骤1.3 事务的隔离级别1.4 回滚点(保存点)1.5 DELETE和TRUNCATE在事务中的区别 2 视图2.1 视图的创建2.2 视图的修改2.3 删除视图2.4 查看试图结构2.5 试图和表的对比3 变量3.1 系统变量和会话变量3.2 自定义变量3.2.1 用户变量3.2.2 局部变量 4 存储过程函数4.1 创建4.2 调用4.3 删除4.4 查看结构 5 流程控制函数5.1 函数5.1.1 创建5.1.2 调用5.1.3 查看结构5.1.4 删除 5.2 流程控制结构5.2.1 分支结构(复习)5.2.2 循环结构

1 事务的介绍

介绍: 一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行 其中MySQL数据库中innodb支持数据库

1.1 事务的属性

原子性: 原子性是指事务是一个不可分割的单位,要么都成功要么都失败一致性: 事务必须是数据库从一个一致状态变换到另外一个一致状态隔离性: 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰持久性: 持久性是指一个事务一旦被提及,他对数据中的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

1.2 事务的演示步骤

隐式事务: 事务没有明显的开启和结束的标记 比如insert,update,delete 显式事务:事务具有明显的开启和结束的标记 前提:必须先设置自动提交功能为禁用 关闭事务语法:SET AUTOCOMMIT=0 步骤:

开启事务 SET AUTOCOMMIT=0;便是事务中的语句结束事务 COMMIT:提交事务 ROLLBACK:回滚事务

1.3 事务的隔离级别

对于同时运行多个事务,当这些事务访问数据库中相同的数据式,如果没有采用必要的隔离机制,就会导致各种并发问题,

脏读: 对于两个事务T1和T2,T1读取了已经倍T2更新但还没有被提交的字段,之后若T2回滚,T1读取的内容就是临时且无效的不可重复读:对于两个事务T1和T2,T1读取了一个字段,然后T2更新了该字段,T1再次读同一个字段,值就不同了幻读: 对于两个事务T1和T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,T1再次读同一个字段就会多出几行

可以通过设置数据库的事务隔离级别 查询当前事务隔离级别:SELECT @@tx_isolation;

read uncommitted : 读取尚未提交的数据 :就是脏读read committed:读取已经提交的数据 :可以解决脏读repeatable read:重读读取:可以解决脏读 和 不可重复读 —mysql默认的serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表

1.4 回滚点(保存点)

关键字 SAVEPINT 节点名; 搭配 ROLLBACK TO 节点名

1.5 DELETE和TRUNCATE在事务中的区别

DELETE可以回滚,TRUNCATE依然会删除

2 视图

含义:虚拟表,和普通表一样使用 MySQL5.1版本新特性

2.1 视图的创建

语法: CREATE VIEW 视图名 AS 查询语句 特点:

重用sql语句简化复杂的sql操作,不必知道它的查询细节保护数据,提高了安全性

2.2 视图的修改

方式一: CREATE OR REPLACE VIEW 视图名 AS 查询语句; 试图不存在则创建,存在则修改方式二: ALTER VIEW 试图名 AS 查询语句; 修改试图

2.3 删除视图

语法: DROP VIEW 试图名,试图名…;

2.4 查看试图结构

DESC 视图名; SHOW CREATE VIEW 视图名(\G)

2.5 试图和表的对比

试图关键字VIEW,表关键字TABLE试图基本没有占用空间(sql逻辑占用了空间)试图一般不能增删改

3 变量

分类: 系统变量

全局变量会话变量

自定义变量

用户变量局部变量

3.1 系统变量和会话变量

使用语法:

查看所有系统变量 SHOW [GLOBAL|SESSION] VARIABLES: 默认查看会话变量查看满足条件的部分变量 SHOW [GLOBAL|SESSION] VARIABLES LIKE ‘%变量%’查看指定的某个系统变量 SELECT @@[GLOBAL|SESSION].变量名: 默认会话变量为某个系统变量赋值 SET [GLOBAL|SESSION].系统变量名 = 值: 默认会话变量 SET @@[GLOBAL|SESSION].变量名

区别:

当服务器运行时很多的变量可以动态改变。客户端只能更改自己的会话变量,不能更改其他客户端的会话变量,退出客户端时变量复原,并且不会影响其他客户端,系统变量影响全局。服务器启动时,将全局变量初始化为默认值,这些默认值可以在配置文件或命令行中更改。想要更改全局变量,必须具有super权限。设置会话变量不需要特殊的权限。

3.2 自定义变量

变量是用户自定义的 语法: 声明 赋值 使用(查看,比较,运算)

3.2.1 用户变量

作用域:当前会话(链接)有效 1.声明并初始化 SET @变量名=值 SET @变量名:=值 SELECT @变量名:=值 2. 赋值(更新值) 重新声明 SELECT 字段 INTO 变量名 FROM 表 3. 查看变量 SELECT @变量名;

3.2.2 局部变量

作用域:仅仅在定义它的BEGIN END 中有效,应用在BEGIN END中第一句话

声明 DECLARE 变量名 类型; DECLARE 变量名 类型 DEFAULT 值;赋值 与用户变量一致(除了SELECT 其他可以不加@ )使用

局部与用户变量的区别

用户变量作用域当前会话,局部变量作用在BEGIN END用户变量可以定义在会话的任何位置,局部变量只能在BEGIN END中,且为第一局话

4 存储过程函数

存储过程的函数:类似与Java中的方法 特点:

提高代码的重用性简化操作减少了编译次数,别且减少了和数据库服务器的连接次数 存储过程一组预先编译好的SQL语句的集合,理解成批处理语句

4.1 创建

语法: CREATE PROCEDURE 存储过程(参数列表) BEGIN 方法体 END 注意:

如果存储过程只有一句, BEGIN END 可以省略存储过程体中每条语句需要加分号,在(CMD)存储过程中结尾使用 delimiter 结束名 重新设置

参数列表包含了三部分( 参数模式 参数名 参数类型)

参数模式: IN: 该参数可以作为输入,也就是该参数需要调用传入值(默认) OUT: 该参数可以作为输出,也就是该参数可以作为返回值 INOUT: 该参数作为输入值又可以作为输出值,也就是说该参数既需要传入值,又可以返回值

4.2 调用

CALL 存储过程名(参数列表) 结束名 (部分工具可以不加结束名);

4.3 删除

DROP PROCEDURE 存储名;

4.4 查看结构

SHOW CREATE PROCEDURE 存储名;

5 流程控制函数

5.1 函数

函数:有且只有一个返回

5.1.1 创建

语法: CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型 BEGIN 函数体 END 注意:

参数列表包含两部分: 参数名,参数类型语句里面有return语句,如果没有也不会报错结构体与存储函数差不多

5.1.2 调用

SELECT 函数名(参数列表);

5.1.3 查看结构

SHOW CREAT FUNCTION 函数名;

5.1.4 删除

DROP FUNCTION 函数名;

5.2 流程控制结构

顺序结构:程序从上往下依次执行分支结构: 程序从两条或多条语句选择一条语句执行循环结构: 程序在满足一定条件的基础上,重复执行一代码

5.2.1 分支结构(复习)

if函数 语法: IF(表达式1,表达式2,表达式3) 表达式1成立,则if函数返回表达式2,否则返回表达式3if结构 语法: if 条件1 then 语句1; elseif 条件2 then 语句2; … [else 语句; ] end IF; 应用在BEHIN END 中case结构 类似Java中的switch语句或多重if 语法 CASE 变量 WHEN 判断值 WHEN 语句; … ELSE 语句 END CASE;

5.2.2 循环结构

分类

WHILE WHILE 循环条件 DO 循环体 END WHILE;

LOOP LOOP 循环体 END LOOP;

REPEAT REPEAT 循环体 UNTIL 结束条件 END REPEAT;

循环控制

ITERATE: 结束本次循环,继续下一次LEAVE: 跳出,结束当前所有循环

需要在循环前面加标签 WHILE然后 ITERATE 标签

最新回复(0)