Mysql知识汇总

1.索引相当于目录,有单列索引,组合索引。。。也占内存,可以提高查询效率但是会降低增删改效率。

语句:CREATE index name on table(clounm(length))


2.

全局锁:锁的是整个database。由MySQL的SQL layer层实现的 -

表级锁:锁的是某个table。由MySQL的SQL layer层实现的 -

行级锁:锁的是某行数据,也可能锁定行之间的间隙。由某些存储引擎实现,⽐如InnoDB

按照锁的功能来说分为:共享读锁和排他写锁。 按照锁的实现⽅式分为:悲观锁和乐观锁(使⽤某⼀版本列或者唯⼀列进⾏逻辑控制)


乐观锁:他是相对于悲观锁而言,认为数据库并发没那么高,通过程序(递归和版本号判断)控制,发现不对就会提交不成功,重新拿数据,对更改有点东西,但是不控制读取,万一碰上了冲突,来回查,效率低。

悲观锁:悲观锁要给数据库上锁啦,表级锁和行级锁,

     表级锁有表锁(手动)和元数据锁(自动),

          表锁有两个形式:手动加,共享读、独占写,

锁类型自己可读自己可写 他人可读他人可写
读锁  
写锁  

                    共享读:读锁,锁的表,大家也能读,但是不能写,等着解开才行

                    独占写:写锁,锁住表,大家查都不能查,得等他写完了开锁

                   lock tables t1 read,t2 write;
                   这个语句有两个含义: 

  •             对其他线程来说,t1表,可以读,不可以写;t2表,读写都不可以
  •             对本线程来说,t1表只能读,t2表只能读写

          元数据锁(MDL),自动加,保证读写正确性,他也有读锁和写锁

                   DML(select、update、insert、delete)、DDL(create、alter、drop)语句时都会申请MDL锁,读读共享,读写互斥,写写互斥

                   应该1.设置参数lock_wait_timeout为较小值,使被阻塞端主动停止。2.DDL操作及备份操作放在业务低峰期执行。 3.少用工具开启事务进行查询,图形化工具要及时关闭 4.规范使用事务,及时提交事务,避免使用大事务。

      行锁

                  当我们对一行进行更新但是不提交的时候,其他进程也对该行进行更新则需要进行等待,这就是行锁

                 如果我们对一行进行更新,其他进程更新别的行是不会受影响的

                当我们的行锁涉及到索引失效的时候,会触发表锁的行为

               共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁

              共享锁又称写锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值