SQL语句知识点梳理——事务管理、视图、变量

八、事务管理

  • ==事务的概念==:
    一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。即在事务中,每个mysql语句相互依赖,一旦某条sql语句一旦执行失败或产生错误,整个单元将会回滚

  • 事务的ACID属性
    Atomic:原子性,指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
    Consistency:一致性,事务必须使数据库从一个一致性状态切换到另一个一致性状态,比如金额总额2000,转账后和还得是2000
    Isolation:隔离性,一个事务的执行不能被其他事务干扰
    Durability:持久性,事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的操作和数据库故障不应该对其有影响

  • ==事务的创建==

    1. 开启事务

      set autocommit=0;

      start transaction(可选的)

    2. 编写sql

      select insert update delete增删改查...,不能是表或库的操作create等......
      
    3. 提交或回滚事务

      commit;提交事务rollback;

      回滚事务(即sql语句不实现

  • ==隔离级别==

    ==默认是第3级别,可重复读==,但是会出现幻读(即一个事务还没有提交,在另外一边进行了Insert等操作,导致表发生变化,最终提交事务时影响的行数增加

    级别 脏读 不可重复读 幻读
    read uncommitted yes yes yes
    read committed no yes yes
    repeatable read no no yes
    serializable no no no

    ==脏读==
    一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
    ==不可重复读==
    一个事务多次读取,结果不一样
    ==幻读==

    一个事务读取了其他事务还没有提交的数据,只是读到的是其他事务“插入”的数据

    ==设置隔离级别==

    • 查看当前隔离级别:

      select @@tx_isolation;
      
    • 设置当前mysql连接的隔离级别:

      set transaction isolation level 级别
      
    • 设置数据库系统的全局隔离级别:

      set global transaction isolation level 级别
      
    • 设置保存点:

      savepoint 名称;搭配rollback使用回滚至保存点
      

九、视图

  • 含义:虚拟表,和普通表一样使用,mysql5.1版本之后出现的新特性,是通过表动态生成的数据。其实就是封装一个sql逻辑。只有在被调用的时候才会创建表。

1. 创建视图

/*创建视图*/
create view 视图名 as 查询语句

/*调用视图*/
select * from 视图名 where 筛选条件......

2. 修改视图

/*方式一*/
create or replace view 视图名 as 查询语句;当视图存在的时候就代替,不存在就创建

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

3. 查看视图

desc 视图名
show create view 视图名 /*创建并查看*/

4. 删除视图

drop view 视图名,视图名,......;

5. 视图和表的比较

创建语法的关键字 是否实际占用物理空间 使用
视图 create view 只是保存了sql逻辑 一般只是查询
create table 保存了数据 增删改查

十、变量

1. 类型

  • 全局变量:作用域为多个会话
  • 会话变量(自定义用户变量):作用域为单个会话,针对当前会话有效

2. 赋值

  1. 声明并初始化

    set @用户变量名=值
    
  2. 赋值

    方式一:通过set或select,同初始化
    方式二:通过select into:select 字段 into 变量名 from 表名;
    
  3. 使用

    select @用户变量名
    

3. 局部变量

  • 作用域:仅仅在定义它的begin中end有效

  • 声明

    declare 变量名 类型;
    declare 变量名 类型 defautl 值;
    
  • 赋值、使用同上

  • 对比局部变量和用户变量

    作用域 定义和使用的位置 语法
    用户变量 当期会话 会话中的任何地方 必须加@符号
    局部变量 begin end中 只能在begin end中,且为第一句话 一般不用加@符号

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。