一、锁的类型有哪些呢
mysql锁分为共享锁和排他锁,也叫做读锁和写锁。 读锁是共享的,可以通过lock in share mode实现,这时候只能读不能写。
写锁是排他的,它会阻塞其他的写锁和读锁。从颗粒度来区分,可以分为表锁和行锁两种。
表锁会锁定整张表并且阻塞其他用户对该表的所有读写操作,比如alter修改表结构的时候会锁表。
行锁又可以分为乐观锁和悲观锁,悲观锁可以通过for update实现,乐观锁则通过版本号实现。
二、MySQL底层实现,MySQL有什么引擎
MySQL底层采用B+树实现,B+树可以看作2-3树的一种扩展,B+树是每个节点允许存在多个元素,并且每个节点有多个孩子的多叉查找树,B+树的非叶子节点存储的是导航信息,不包含实际的值,而叶子节点存储了实际的值,所有的叶子节点和相邻的节点采用链表连接,便于区间查找和遍历。关于叶子节点存储的值,在InnoDB中非主键索引中,存储的是主键的信息,而聚簇索引(主键索引)中存储的是实际数据。
而在MyISAM中叶子节点存储的是指向实际数据存储位置的指针。
MySQL在5.5版本采用的是MyISAM作为默认的数据库引擎,之后就被更优秀的InnoDB引擎替代。
三、什么是事务,事务特性
事务指的是满足ACID特性的一组操作。
Atomicity 原子性:事务被视为不可分割的最小单元,要么全部提交成功,要么全部失败回滚。 Consistency 一致性:数据库在事务执行前后保持一致的状态。
Isolation 隔离性:一个事务所做的修改在最终提交之前,对其他事务是不可见的。
Durability 持久性:一旦事务提交,则其修改将会被永久保存到数据库中。
四、如何设计一个高并发的系统
数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引优化
使用缓存,尽量减少数据库IO
分布式数据库、分布式缓存
服务器的负载均衡