AI智能
改变未来

MySQL 学习第六天

MySQL 学习第六天

  • 事务(Transaction)
  • 提交事务
  • 回滚事务
  • 事务的特性
  • 关于事务之间的隔离性
  • 索引
    • 索引实现原理
    • 索引分类
  • 视图
  • DBA命令
  • 数据库设计三范式
    • 三范式都是哪些

    事务(Transaction)

    什么是事务
    一个事务是一个完整的业务逻辑单元,不可再分
    比如
    银行转账从A账户向B账号转账10000,需要执行两条update语句
    update t_act set balance = balance - 10000 where acton = \'act-001\'update t_act set balance = balance + 10000 where acton = \'act-002\'

    以上两条DML语句必须同时成功或同时失败,不允许出现一条成功一条失败。

    要想保证以上的两条DML语句同时成功或者同时失败,,那么就需要使用数据库的事务机制了。

    和事务相关的语句只有:DML(insert delete update)
    它们这三个语句都是和数据库当中的‘数据’相关的
    事务的存在是为了保证数据的完整性和安全性

    提交事务

    commlt

    把历史操作一并同步到硬盘文件当中。硬盘文件以旦改了之后历史操作一并清空了。

    回滚事务

    rollback

    把历史操作清空,不和硬盘打交道

    事务的特性

    事务包括3大特性:ACID

    A:原子性:事务是最小的工作单元,不可再分
    C:一致性:事务必须保证多条DML语句同时成功或同时失败
    D:隔离性:事务A与事务B之间具有隔离性
    D:持久性:持久性说的是最终数据必须久化到硬盘中,事务才算成功结束

    关于事务之间的隔离性

    事务隔离性存在隔离等级,理论上隔离等级包括4个:

    第一等级:读未提交 (read uncommitte)
    对方事务还没有提交,我们当前实际可以读取到对方未提及交的数据
    读未提交存在脏读(Dirty Read)现象
    第二等级 读已提交 (read committeld)
    这种隔离解决了脏读现象。
    对方事务条件之后的数据我方可以读到。
    读已提交存在的问题是:不可重复读。
    第三级别:可重复读 (repeatable read)
    这种隔离级别解决了:不可重复问题。
    这种隔离级别存在的问题是:读取到的数据是幻象
    第四级别:序列化读 / 串行化读
    解决了所有问题
    效率低,需要排队执行

    MySQL数据默认的隔离等级是:可重复读

    MySQL事务默认情况不是自动提交的

    什么是自动提交
    只要执行任意一条DML语句则提交一次。
    怎么关闭自动提交
    start eransaction;

    设置事务的全局隔离级别
    set global transaction isolation level 隔离级别;

    查看事务的全局隔离级别
    select @@global.tx isolation;

    ================================================

    索引

    什么是索引,有什么用
    索引就相当于一本书的目录,通过目录可以快速的找到对应的资源。

    在数据库方面,查询一张表的时候有两种检索方式
    第一种:全表扫描
    第二周:根据索引检索(效率高)
    索引为什么可以提高检索效率
    其实最根本的原理是缩小了扫描的范围。
    索引虽然可以提升检索效率,但是不能随意添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护。是有维护成本的。比如,表中的数据经常被修改这样就不适合添加索引了,因为数据库一旦修改,索引需要重新排序,进行维护。
    什么时候给字段添加索引
    数据量大
    该字段很少DML操作
    改字段经常出现在where子句当中

    给字段添加索引
    create index 索引名称 表名(字段名)
    删除索引对象
    drop index 索引名称 on 表明;

    索引什么时候失效
    模糊查询的时候,第一个通配符使用的是%,这个时候索引失效的。

    索引底层采用的数据结构是: B + Tree

    ================================================

    索引实现原理

    通过B Tree缩小扫描范围,底层索引进行了排序分区,索引会携带数据在表中的物理地址最终,通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中数据。效率是最高的

    select ename from emp where ename = ‘SMITH’;
    通过索引转换成
    select ename from emp where 物理地址 = ox3;

    ================================================

    索引分类

    单一索引:给单个字段添加索引
    复合索引:给多个字段添加索引
    主键索引:主键上会自动添加索引
    唯一索引:有nuique约束的字段上会自动添加索引

    ================================================

    视图

    什么是视图
    站在不同的角度去看到数据。

    怎么创建视图
    select view 视图名字 as select语句

    怎么删除视图
    drop view 视图名字;

    注意:
    只有DQL语句才能以视图对象的方式创建出来

    对视图进行增删改查,会影响到原表数据(通过视图影响原来数据,不是直接操作原表)
    可以对视图进行CRUD操作

    视图的作用
    视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD。

    DBA命令

    将数据库当中数据导出
    在windows的dos命令窗口中执行:

    mysqlump 数据库名> 绝对路径 -u用户 -p密码

    导入数据

    create database 数据名字

    数据库设计三范式

    什么是设计范式
    设计表的休据。按照这三范式设计的表不会出现数据冗余。

    注意:
    在实际开发中,以满足的需求未主,有的时候会拿冗换执行速度

    三范式都是哪些

    第一范式:
    任何一张表都应该有主键,并且每一个字段原子性不可再分
    第二范式
    建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
    多对多 三张表 关系两个外键
    第三范式
    建立在第二范式的基础之上的,所有非主键字段直接依赖主键,不能产生传递依赖。
    一对多 两张表 多的表叫外键
    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » MySQL 学习第六天