MySQL(一)事务,范式

事务

  1. 四大特性ACID:原子性Atomicity)、一致性Consistency)、隔离性Isolation)、持久性Durability)。

    • 原子性:事务包含的所有操作要么全部成功,要么全部失败回滚
    • 一致性:一个事务执行之前和之后都必须处于一致的状态,比如a与b账户共有1000块,两人之间转账之后无论成功还是失败,账户总和还是1000块
    • 隔离性:跟隔离级别相关,如read committed,一个事务只能读到已提交的修改
    • 持久性:一旦被提交,对事务的修改是永久的,即便是在数据库系统中遇到故障的情况都不会丢失提交事务的操作
  2. 事务隔离级别:

    先了解以下几个概念

    • 脏读:一个事务处理过程里读取了另一个未提交的事务中的数据
    • 不可重复读:对于在数据库中的某行记录,一个事务范围内多次查询却返回了不同的数据值,是由于在查询间隔,另一个事务修改并提交了数据
    • 幻读:某个事务在读取某个范围内的数据时,另外一个事务又在该范围内插入了新的记录

    事务隔离就是为了解决以上的问题。MySQL数据库提供了四种隔离级别(以下按隔离级别由高到低),隔离性越高,并发性越低,数据越可靠,性能越低。

    • 串行化(Serializable):强制事务排序,避免幻读的发生
    • 可重复读(Repeatable read,RR):MySQL的默认事务隔离级别,确保同一事务的多个实例在并发读取数据时,会看到同样的数据行,解决了不可重复读的问题
    • 读已提交(Read committed,RC):一个事务只能读取已提交的修改。避免脏读的发生
    • 读未提交(Read uncommitted,RU):所有事务都可以看到其他未提交事务的执行结果。

    查看隔离级别:select @@transaction_isolation

    设置隔离级别:set session transaction isolation level read uncommitted

    • 生产环境数据库一般使用RC,读已提交
      • 在RR下,存在间隙锁,会导致出现死锁的概率比RC大得多(死锁有四个特点,互斥使用,循环等待,占有且等待,不可抢占,可以通过jstack 程序名查看死锁
      • 在RR下,条件列未命索引会锁表。在RC下,只锁行。
    • 互联网项目中mysql应该选择RC
  3. 开启事务:start transaction,提交事务:commit,回滚:rollback,事务必须以commit或rollback结尾。

范式,三大范式

  1. 第一范式1NF,确保数据库表字段的原子性。比如字段userInfo: 广东省 10086' ,依照第一范式必须拆分成 userInfo: 广东省 userTel: 10086两个字段。
  2. 第二范式2NF,必须满足第一范式,另外,必须有一个主键,且非主键列必须完全依赖于主键
  3. 第三范式3NF,必须满足第二范式,另外,非主键列必须直接依赖于主键,不能存在传递依赖

编码与字符集

  1. 为了统一各类编码格式,出现了Unicode编码格式,用两个字节表示,而ASCII码是一个字节。为了剩下空间,出现了UTF-8编码。
  2. 按照一定规则把符号和二进制码对应起来,就是编码,而把这些字符聚在一起,就是字符集。比如,utf-8字符集就是所有utf-8编码格式的字符的合集。查看mysql支持哪些字符集:show charset
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值