技术总结:
今天是周二,带老婆去了趟单位,中午一起吃了饭,美滋滋。
明天老婆就要去培训了,自由了,嘿嘿嘿。
今天我发现我项目里的代码有点问题,似乎我的轨迹设计部分有问题,今天又重新生成了一下,发现问题少了很多,看来是我的轨迹设计有点问题。
今天把问题梳理了一下,明天应该能解决这个问题,把后置的部分搞定。
学习笔记:
1.MyISAM
只有表级锁,而InnoDB
支持行级锁和表级锁,默认为行级锁;
2.MyISAM
不提供事务支持。而InnoDB
提供事务支持;
3.MyISAM
不支持外键,而InnoDB
支持;
4.MyISAM
不支持聚集索引,InnoDB
支持聚集索引;
5MyISAM
不支持MVCC,InnoDB
支持。应对高并发事务,MVCC比单纯的加锁更高效;
特性 | InnoDB | MyISAM |
---|---|---|
事务安全 | 支持 | 无 |
存储限制 | 64TB | 有 |
空间使用 | 高 | 低 |
内存使用 | 高 | 低 |
插入数据的速度 | 低 | 高 |
对外键的支持 | 支持 | 无 |
1.是否支持行级锁
MyISAM
只有表级锁,而InnoDB
支持行级锁和表级锁,默认为行级锁。
(1)MySQL大致可以归纳为以下3种锁
- 表级锁:开销小,加锁快;不会出现死锁;锁的粒度大,发生锁冲突的概率最高,并发度最低。
- 行级锁:开销大,加锁慢;会出现死锁;锁的粒度小,发生锁冲突的概率最低,并发度最高。
- 页面锁:开销 和加锁时间界于表锁和行锁之间;会出现死锁,锁定的粒度界于表锁和行锁之间,并发一般。
(2)表锁
MyISAM会在执行select语句前,会自动给涉及的表加读锁,在执行增删改操作前会自动给涉及的表加写锁。
- MySQL的表锁有两种模式:
- 表共享读锁
- 表独占写锁
- 读锁会阻塞写,写锁会阻塞读和写。
- 对MyISAM表的读操作,不会阻塞其它进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它线程的写操作。
- 对MyISAM表的写操作,会阻塞其它进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。