从锁的类别上来讲,有共享锁和排他锁。
共享锁:又叫做读锁。当用户要进行数据的读取时,对数据加上共享锁。共享锁可以同时加上多个。
排他锁:又叫做写锁。当用户要进行数据的写入时,对数据加上排他锁。排他锁只可以加一个,他和其他的排他锁,共享锁都相斥。
MySQL 中 CHAR 和 VARCHAR 的区别?
1、 CHAR和VARCHAR类型在存储和检索方面有所不同
2,CHAR列长度固定为创建表时声明的长度,长度值范围是1到255
当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格。
MySQL在MySQL数据库中MyISAM和InnoDB的区别?
MyISAM:
不支持事务,但是每次查询都是原子的;
支持表级锁,即每次操作是对整个表加锁;
存储表的总行数;
一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;
采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
InnoDb:
支持ACID的事务,支持事务的四种隔离级别;
支持行级锁及外键约束;因此可以支持写并发;
不存储总行数:
一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为2G),受操作系统文件大小的限制;
主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。
MySQL 中 select for update 含义?
select查询语句是不会加锁的,但是select for update除了有查询的作用外,还会加锁呢,而且它是悲观锁哦。至于加了是行锁还是表锁,这就要看是不是用了索引/主键啦。
没用索引/主键的话就是表锁,否则就是行锁。
1、 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
2、 一致性:指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。
3、 隔离性:多个事务并发访问时,事务之间是相互隔离的,即一个事务不影响其它事务运行效果。简言之,就是事务之间是进水不犯河水的。
4、 持久性:表示事务完成以后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。
事务ACID特性的实现思想
原子性:是使用undo log来实现的,如果事务执行过程中出错或者用户执行了 rollback,系统通过undo log日志返回事务开始的状态。
持久性:使用redo log来实现,只要redo log日志持久化了,当系统崩溃,即可通过redo log 把数据恢复。
隔离性:通过锁以及MVCC,使事务相互隔离开。
一致性:通过回滚、恢复,以及并发情况下的隔离性,从而实现一致性。
MySQL中如何优化查询过程中的数据访问?
1、 访问数据太多导致查询性能下降
2、 确定应用程序是否在检索大量超过需要的数据,可能是太多行或列
3、 确认MySQL服务器是否在分析大量不必要的数据行
4、 避免犯如下SQL语句错误
5、 避免查询不需要的数据。解决办法:使用limit解决
6、 多表关联返回全部列。解决办法:指定列名
7、 总是返回全部列。解决办法:避免使用SELECT *
8、 重复查询相同的数据。解决办法:可以缓存数据,下次直接读取缓存
9、 使用explain进行分析,如果发现查询需要扫描大量的数据,但只返回少数的行,可以通过如下技巧去优化;
10、 使用索引覆盖扫描,把所有的列都放到索引中,这样存储引擎不需要回表获取对应行就可以返回结果。
11、 改变数据库和表的结构,修改数据表范式
12、 重写SQL语句,让优化器可以以更优的方式执行查询。
Was this helpful?
0 / 0