- 项目相关,并发多少,有没有压测
- mysql事务ACID
- A是指原子性,一件事务要么全部完成,要么全部不完成;
- C是指一致性,执行事务前后,数据保持一致,多个事务对同一数据的读取结果是相同的;
- I是指隔离性,并发访问数据时,各个事务之间是相互独立的;
- D是持久性,是指一件事务完成之后,对数据库的操作是永久性的。
-
并发事务带来的问题
-
脏读
读取了脏数据,脏数据是一个事务还没有提交的数据。具体是指,多并发条件下,一个事务读取了另一个事务正在修改但还没有提交的数据。 -
丢失修改
是指,多并发情况下,一个事务对数据的修改,被另一事务的修改覆盖。 -
不可重复读
一个事务多次读取数据,读取内容前后不一致。 -
幻读
一个事务多次读取数据,两次读取多了几行或者少了几行数据。它与不可重复读的区别在于,不可重复读数据读取数目不会发生变化,只是内容发生变化。
-
-
MySQL四个隔离级别
-
读未提交(read uncommitted)
最低隔离级别,允许读取未提交数据,会出现脏读,不可重复读,幻读。 -
读已提交(read committed)
只能读取已经提交的数据,可以防止脏读,但不能防止不可重复读和幻读。 -
可重复读(repeatable read)
可以重复读取数据,读取结果一致,可以防止脏读和不可重复读,但是不能防止幻读。 -
可串行化(serializable)
最高隔离级别,完全服从ACID隔离级别,所有事物依次逐个执行,可以防止脏读,不可重复读,幻读。
-
-
InnoDB存储引擎默认采用REPEATABLE-READ隔离级别,但是它有next-key lock算法,可以防止幻读的产生,所以可以达到可串行化隔离级别。InnoDB在分布式事务下,一般会用到可串行化隔离级别
-
mysql存储过程
-
MySQL索引建立几大原则
-
选择唯一性索引
-
最左前缀匹配原则(联合索引: mysql 从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。)
-
尽量选择区分度高的列作为索引,谁的区分度更高(同值的最少),谁建索引
-
为经常需要排序、分组、联合操作的列建立索引
-
索引的长度应尽量少,方便存储和查询
-
表的主键、外键必须有索引
-
限制每张表上的索引数量,建议不超过5个
-
每一张表必须有主键
-
前缀索引: 有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符
-
-
数据库三大范式
-
第一范式,数据库表中每一字段值都是不可分割的原子值
-
第二范式,表中每一列都和主键相关,而不能只与主键某一部分相关(主要针对联合主键而言)
-
第三范式,表中非主键字段必须直接依赖于主键,而不能间接依赖
-
-
Mysql最左匹配原则
在mysql建立联合索引时,会遵循最左匹配原则,即最左优先,会从联合索引最左边开始匹配。 -
为什么要有联合索引
-
减少开销
-
覆盖索引,减少IO操作
-
效率高,索引列越多,筛选出的数据越小
-
-
mysql的约束有哪些
-
唯一约束,unique
-
非空约束,not null
-
唯一非空约束,unique not null
-
主键约束,primary key
-
自增长策略,auto_increment
-
外键约束,foreign key(classnum) reference class(num)
-
-
常见字段类型
int char varchar date time -
常见语句
创建表 create table student(.......);
删除表 drop table student;
向表添加字段,删除字段,更改字段类型
alter table student add name varchar;
alter table student drop name;
alter table student modify name char;
插入记录
insert into student(num) value(1);
修改表中记录
update student set name='Tom' where num=1;
删除记录
delete from student where num=1;
查询语句 -
主键索引,唯一索引,普通索引,全文索引,多列索引
-
数据库删除命令
drop table student;
truncate table student;
delete from student where num=1;
drop与truncate的区别在于,drop不仅删除表中内容,还将表从数据库中移除。truncate只是清除表中数据。 -
招商银行面试准备
最新推荐文章于 2022-04-12 12:07:39 发布