数据库的隔离级别和事物的隔离性

mysql三大范式:
第一范式:列不可分解
第二范式:唯一索引
第三范式:引用主键

读未提交:事物还没有提交,而其他事物会读取该事务没有提交的缓存的数据,这就是脏读

读已提交:就是只能读已经提交了的数据。事件A读取初始数据,在这个间隔中事件B也开始读取了初始数据,事件A对初始数据进行了操作,但是还没有提交,因此事物B是获取不到事件A操作后的数据,导致事件B还是查询的是初始数据,所以当事件A和事件B读取出来的数据就会不一样,这就造成了虚读

可重复读:这是Mysql的事物隔离级别,就是在A事物读取的时候,B事物也去读取,但是B事物并不能对数据进行更新,但是可重复读,有个问题就是,只是禁用了update操作,并没有禁用insert,所以这就会造成幻读

串行化:事物的每一次读取都要等待前一个事物的结束才会执行,会导致效率低

二事物的隔离级别:
读未提交:就是在事物A在操作数据的时候,会有一个缓存,导致了事物B去缓存中读取了数据:
读已提交:就是在事物A在操作数据的时候,操作了但是还没有提交,然后事物B又读取了数据,对其进行操作,并提交,这就导致事物A操作的数据不一致
可重复读:就是在事物A对数据进行操作的时候,事物B不能对数据进行修改操作,但是只是禁用了修改更新操作,并没有禁用插入操作
串读:就是要执行事物B,那么事物A必须要全部执行后才能执行事物B,这就会导致效率很慢

三Mysql数据库事物的ACID特性:
1:原子性:就是事物执行要么全部执行,要么全部不执行
2:一致性:就是在执行事物的时候,事物各位置的执行状态保持一致
3:隔离性:就是在运行事物A的时候,与其他事物隔离
4:持久性:就是只要你事物运行完成,不管出现什么系统异常,数据还是保持不变。

数据库中锁
行级锁操作主要的就两个:

  1. 排它锁(写锁):在事物A在对数据获得排它锁时,可以对数据进行读写操作,但是其它事物就不能对数据进行加锁读写操作了。
添加行级写锁
select * from 表名 where 条件 for update
  1. 共享锁(读锁):在事物A在对数据获得共享锁时,可以对数据进行读操作(不能对数据进行写操作),其他事物也可以对数据进行一个加锁读的行为。
添加行级读锁
select * from 表名 where 条件 lock  in share mode

表锁:

添加表锁
lock tables 表名 read
删除表锁
unlock tables 

关于Mysql中的搜索引擎的区别:

  1. Innodb:支持表锁和行锁,并且这是一个事物性的搜索引擎,拥有热备份的功能,在数据恢复中要比mysiam要快,支持外键,并且可以在索引中添加数据(主索引是聚簇索引),避免从磁盘直接读取数据,从而读的速度要比MyISAM要快。
  2. MyISAM:支持表压缩和空间索引

关于Innodb中索引的创建:
1.如果在表中创建了主键,那么就会根据主键来创建索引
2.如果在表中没有创建索引,那么就会根据,没有为空的字段来创建索引
3.如果上面两种都没有,那么Innodb就会自己虚拟创建一个索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值