day01笔记

隔离级别:
    1.读未提交:造成脏读,读到别的事物未提交的数据。update操作
    2.读已提交:不可重复读,读到别的事物插入的数据。select操作
    3.可重复读:解决脏读,不能解决幻读。insert/delete操作
    4.串行化:表锁,无并发性。解决幻读
 
死锁:
    产生死锁的事物进行回滚即可。(或者查询时间达到锁超时时间,放弃锁)
 
 
查看是否自动提交  0或者NO开启,1或者YES关闭
SHOW VARIABLES LIKE 'AUTOCOMMIT';
 
InnoDB采用的是两阶段锁定协议
 
MVCC(多版本并发控制)
非阻塞读操作,写操作只锁定需要的行。是通过保存数据在某个时间点的快照来实现的。
给每一行,加两个字段一个是创建版本号,一个是删除时版本号。(每开始一个事物,系统版本号就递增)
优点:大多数操作都不用加锁
缺点:每行记录都需要额外的存储空间,需要做更多的行检查工作,以及额外的维护工作。
 
InnoDB通过间隙锁策略防止幻读的出现。
优势:支持事物,表基于聚簇索引建立,行锁使用多版本控制(MVCC)实现锁,跨平台性支持热备份。
 
MyISAM:mysql5.1之前的默认版本
特点:不支持事物,表锁。影响效率
 
选择存储引擎考虑因素:
1.事物:InnoDB支持事物,如果不需要事物,并且主要是select和insert操作,那么选择MyISAM(一般日志型)。
2.备份:热备份选择InnoDB
3.崩溃恢复:数据量比较大的时候,MyISAM崩溃发生损坏的概率大于InnoDB。
4.特有的特性:自己选择
日志表,固定数据的表,备份恢复崩溃不重要的时候,选择MyISAM(数据写到内存中,定期将数据刷出到磁盘)。
 
修改数据库表的存储引擎
1.alter  table  mytable engine = InnoDB(将数据从原表复制到一张新表中,同时原表可能会加锁)
2.将表文件导出后,修改建表语句。重新导入数据库
3.创建与查询:
    create  table  mytable;
    alter table mytable engine = InnoDB;
    insert into  mytable   select * from  old_table;
如果数据量大的话,可以按id分段导入。导入的同时加锁,保证数据的一致性。
 
posted @ 2020-12-23 10:23  山沟君  阅读(46)  评论(0)    收藏  举报