zoukankan      html  css  js  c++  java
  • 数据库三范式、事务

    三范式

    第一范式(1NF)

      在一张表中,组成表的每一个属性都是不能再分的属性,如果满足这一规则,则该表符合第一范式。

                            

                         表1(不符合)                                                    表2(符合)

      表1的Info字段可以再拆分,故不符合1NF;表2所有属性不可再分,符合。

    第二范式(2NF)

      首先要满足1NF,表中的每一个非主属性必须完全依赖于本表的主键(候选键),而不能是部分依赖。

                          

                表1                             表2

      表1中,学号和课程为联合主键,由于姓名属性只依赖于学号,学分只依赖于课程,故不满足2NF;表2中,选修时间及成绩都完全依赖于主键,故符合2NF。由此也可知不满足2NF的情况只会出现在有联合主键的表中。

    第三范式(3NF)

      首先满足1NF和2NF,另外所有非主属性都是与主键直接相关,而不能是间接相关

                    

                                表1

      表1中,客户名称与订单号并不是直接相关,而是可以通过客户号与订单号间接相关,故不满足3NF

    五大约束

      1、 Primary key:主键约束

      2、 UNIQUE:唯一性约束

      3、 NOT NULL:非空约束

      4、 Foreign key:外键约束

      5、 Default:默认值约束

    事务

    四大特性(ACID)

      1、 原子性(atomicity):一个事务是不可分割的,所以要么执行其全部内容,要么就根本不执行。如果一个事务开始执行,但是由于某些原因失败了,则事务对数据库造成的任何可能的修改都要撤销。

      2、 一致性(consistency):一个事务作为原子从一个一致的数据库状态开始独立运行,则事务结束时数据库也必须是再次是一致的。比如,在转账之前 A + B = 500,那么在转账之后也应是A + B = 500。

      3、 隔离性(isolation):多个并发执行的事务间互不干扰。

      4、 持久性(durability):事务一旦提交,数据库中的数据的改变是永久的,即使数据库出现故障。

    三读

      1、 脏读:两个并发事务,事务T2读取了事务T1未提交的数据。如下图,事务T1尚未提交,这时事务T2进来读取了x的值,但是事务T1最终可能不提交而是进行了回滚,这样T2就读取了无效的x。

            

      2、 不可重复读:在事务内存在多次读取某变量的操作,但是前后读取的值不一样。如下图,事务T2存在两次读取x的操作,但是有可能在第一次读取完的时候,T1事务执行把x值修改,T2再次读取x的值就与第一次读取的结果不一样。

           

      3、 幻读:在某个事务内前后执行了相同的操作(如查询结果集),但得到的结果集不一样。如下图,T1在T2执行的过程中进行了插入操作,导致T2前后查询结果不一致。

           

    事务隔离性级别

      1、 可串行化(serializable):最高隔离级别,通常保证可串行化调度,可避免脏读、不可重复读和幻读的发生。读时加表级共享锁,事务结束释放;更新时加表级排他锁,事务结束后释放。

      2、 可重复读(repeatable read):可避免脏读、不可重复读。读时加行级共享锁,直到事务结束释放;更新时加排他锁,直到事务结束后释放。(mysql默认隔离级别)

      3、 已提交读(read committed):可避免脏读。读时加行级共享锁,读完释放;更新时加行级排他锁,事务结束后释放。

      4、 未提交读(read uncommitted):最低隔离级别,允许读取未提交数据。更新时加排他锁,更新完释放。

  • 相关阅读:
    表的数据类型
    SQLYog Enterprise注册码分享
    MySQL下载安装、基本配置、问题处理
    windows下命令行模式中cd命令无效的原因
    TCP协议三次握手与四次挥手通俗解析
    使用concurrent.futures模块并发,实现进程池、线程池
    进程池、线程池、回调函数
    浅谈web网站架构演变过程
    memcached单点故障与负载均衡
    memcached性能监控
  • 原文地址:https://www.cnblogs.com/X-huang/p/10952761.html
Copyright © 2011-2022 走看看