事务的四个特点(ACID)
1,原子性,一个不可分割的操作。要么做要么就不做。
2,,隔离性 ,不同的记录
3,一致性, 数据的一致性正确性。操作之后的值最后要正确且一致。
4,持久性,记录永久保存。
开启事务--begin,,更改 ---commit
如果不commit 别的client 是查不到的。。。。
隐式提交(DDL)
1,读未提交(不多,违背特性) 有可能读脏数据。
2,读已经提交(解决上边问题,提交后才能读)(幻读(会查到新插入的数据),不可重复读)
3,可重复读(解决上边的问题)(Mysql默认)(解决幻读(可重读)) 复用原来的readview (插入会加锁)
4,串行化
实现:版本链(事务的id)。
Readview(m_ids(事务活跃))
多版本并发控制 MVCC,,,,,加锁,等待提交后,释放锁才能读到。
锁:读锁和写锁,(sql中的一条数据 ,就是资源。) 起作用的是有冲突的锁
读锁:可读,共享锁,,其他可以加读锁但不可加写锁。
写锁: 别人不能动。对select 不起作用。
delete x
insert 隐式
update x
float double 浮点数存储,,decimal 存储是字符型,但是设置精度后,会四舍五入。SQL server 精度会更高
一个表里面的重复率超过40% 全表扫描比较好。
主键索引比普通的要快,因为要回表。
网友评论