1 并发下,锁表不好
2 数据的备份,恢复不希望变动,加锁,双刃剑
3 协调多个进程的一种机制,下单,抢购,加锁,对资源进行保护
4 锁的分类:读和写,表和行锁,
5 读是共享的不会相互影响的,屏幕共享,写是排他的,唯我独尊;
6 表锁:开销小,加锁快
7 show open tables:查看是否加锁;
8 lock table a read,b write;
9 unlock tables;
10 lock table a read;读锁是共享的
11 加了读锁是不可以修改的,自己也不可以修改
12 自己加了读锁,别人的也不可读,仅仅可以读自己,需要清除站;
13 阻塞:a加了读锁,b不能更新!!!阻塞,
14 阻塞:性能严重的下降
read lock
1 lock table a write;
2 可以读自己lock的write,可以修改!!!
3 别人的table不能读
4 别人读a会阻塞!!!
5 唯我独准,别人读写都不行
6 有的时候不锁是缓存问题!!!
7** show status like ‘table%’;**
查看锁的情况
myislm的引擎;
9 myism不适合写为主表的引擎,适合读,阻塞,偏读!!!表锁!!!!
10 行锁:偏向innodb,力度小,冲突低,并发高,支持事务,行锁,适合写,事务的acid,
更新丢失,幻读
11 脏读:读到了修改未提交的数据
12 默认的隔离级别:可重复读;
13 四种隔离级别:
14 show VARIABLES like ‘tx_isolation’ :查看默认的数据库的隔离级别
索引失效和间隙锁
1 有自动提交,
2 set autocommit=0:取消自动提交必须手动commit才会提交
3 commit—show index from a
4 索引不当:innodb默认行锁,—会引发表锁,varchar:加引号,否则重罪,索引了,这样类型装换,索引失效,行变成表锁;
间隙锁的危害
1 数据要是连续的,数据很珍贵,某一条数据不存在!!!主键也没有,
2 范围检索的时候会为哪些字段加锁,不存在的符合条件的会被加锁为间隙锁,别人访问会阻塞!!!!
如何锁定一行
1 select * from a where age=21 for update
2 行锁:运维自己做,监控系统,innodb:实现了行锁,innodb:为高并发而生,使用不当行锁变表锁;
3 有时时客户端的连接工具,重启,缓存问题!!!
4 show status like 'innodb_row_lock’
查看innodb的行锁
5 varchar记得引号;
6 用索引检索数据
主从复制
1 mysql版本一致,不要跨越太多
2 双向ping通