作者:jtzhn_146_607 | 来源:互联网 | 2023-09-25 14:09
1.ACID 是什么?
答: mysql的ACID是指事务的 原子性,一致性,隔离性,持久性。 其中原子性是基于 Redo/undo log机制来实现的, Redo log 记录的是事务更新后的记录值,undo log 记录的是事务更新后的记录,更新失败后,就可以根据undo log来进行回滚。
2. mysql的索引类型包含哪几种?
1) fulltext 索引
适用于大文件text类型以及大小超过text类型的字段。
2) NORMAL普通索引
使用经常使用的字段或者当关联表的一些字段。
3) UNIQUE 唯一性索引
当有多个字段一起表示唯一时,可以使用唯一性索引进行约束,比如用户表里的, 用户名和账号需要唯一并且不为空,那么就将 这2个字段设置一个唯一性的索引。
3. mysql的explain关键字用法?
一般用于在查询前添加explain,用于解释查询出来的语句包含的信息。
4. mysql的binLog是什么?
binlog是mysql用于数据收集和数据恢复的日志管理工具。
5. 你知道mysql的最左索引匹配规则嘛?
答: 当有多个字段共同做为 索引时,如(a,b,c),如果说只用到了b,c那么最左索引匹配就会认为该索引无效,如果用到了a,c或者a,b,那么索引就会生效。
6. mysql的锁有哪几种?
答: 根据加锁的范围,可分为全局锁(全库逻辑备份)、表级锁(表锁(表记录)、元数据锁MDL(修改表结构))、行锁。
全局锁: 给整个数据库加一个全局的读锁,表示只有当前线程能够读取到该数据库,其他线程不能进行读取和修改。
格式: Full tables with read lock
表级锁:
表锁和元数据锁(MDL)
格式: lock tables 表名 read;
设置表锁后,不能对该表进行修改操作。
行锁:
两段锁、 一致性非锁定读(MVCC多版本并发控制, innodb会用快照的形式保存历史信息)、一致性锁定读(可以解决幻读问题)。
一致性锁定读:
select .. for update
select ... lock in share mode
可以通过加一致性锁定读,当2次查询期间有insert语句过来的时候,会进入到阻塞状态,直至读取完毕后,再insert。
- Record Lock:单个行记录上的锁
- Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
- Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身
7. mysql常用命令?
1) 查看系统参数
使用命令 show variables like "%params%" ;
①检测mysql检测死锁机制是否开启5.7:
show variables like "%innodb_deadlock_detect%"
该命令表示如果开启死锁检测机制,那么出现死锁,会随机自动释放一个在死锁的事务。
② 查询binlog变量
show variables like "%binlog%";
2)查询数据库事务的隔离级别
select @@transaction_isolation mysql默认的事务隔离级别为: 可重复读。
3) explain命令, 解释sql
例如可以查看查询的语句是否用到索引
8. mysql的MYISAM存储引擎和Innodb存储引擎有什么区别,哪个性能好?
答: 区别:
1) myisam存储引擎不支持事务,对于不需要事务的操作时,myisam的查询和插入的性能比innodb快的多。
2) myisam 不支持外键,innodb支持外键。
3) myisam 只支持表级锁,Innodb支持表级锁(表锁和元数据锁)和行锁(两阶段锁、一致性非锁定读(MVCC)、一致性锁定读(select … for update,select … lock in share mode))。
9.mysql为什么用B+树做索引?
答:
1) B+树是一种排序好的数据结构。
2)与普通的二叉树相比,B+树只在叶子节点做存储,在同样的内存下,B+树叶子能够存储更多的节点数量,遍历起来更快速方便。
3) B+树是一一种平衡的多叉树,能够做更少的磁盘I/O, 另外叶子节点也可以连接起来,加快遍历。
10.mysql的 sql执行顺序是怎么样的?
答: 如: select * from A left join B on A.c=B.d where A.e="1" order by A.g;
第一步先将A表和B表做笛卡尔乘积。
第二步再通过on将上面的笛卡尔乘积的结果集进行第一次筛选。
第三步 将A表多余的行,即没有匹配到B表的行接入到上面筛选的On结果集后,空的用null填充。
第四步用where对结果集进行筛选。
第五步再通过order by 对结果集作排序。
11.数据库的事务隔离级别有哪几种方式?分别有什么优缺点?
答: 1. 读未提交,一个事务能够读取到另一个事务未提交的记录。
2. 读已提交,事务只能读取到已经提交的记录, 会出现不可重复读的问题,即同一个事务多次读取到的结果是不相同的。
3. 可重复读,即同一个事务,多次查询读取的记录是 相同的,但是会出现幻读的问题,即在读取结果的一瞬间,另外一个事务突然向数据库里插入了一条记录,那么前面的事务好像多读取了一条记录的问题。
4.可串行化,是数据库的隔离的最高级别,不会出现脏读、不可重复读、幻读的问题,但性能比较差。
12. mysql 的check用法?
答: 给字段添加一个约束, 在建表的时候通过check(字段>1) 给字段的值限制范围,即限制字段能为什么值。
13. mysql的binlog日志默认存放在哪儿?
1) 查看日志文件路径
show master status
2)在my.ini文件中 查看bin_log文件
we
14. mysql 自增主键出现不连续的原因?
答: mysql自增主键不连续的情况原因有三个:
1) 唯一键冲突
2) 事务回滚
3) insert...select的时候会出现主键id每次双倍分配导致主键id跳过的问题
参考博客
insert into ..select ..
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c` int(11) DEFAULT NULL,
`d` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `c` (`c`)
) ENGINE=InnoDB;
insert into t1 values(null, 1,1);
insert into t1 values(null, 2,2);
insert into t1 values(null, 3,3);
insert into t1 values(null, 4,4);
create table t2 like t1;
insert into t2(c,d) select c,d from t1;
insert into t2 values(null, 5,5);
select * from t2;
查询结果为:
15. mysql的慢查询默认时间为多长?
答: 10 S
16. 聚簇索引和非聚簇索引的区别是什么? mysql 为什么用自增的id适合作为主键?
答: 聚簇索引在Mysql里是唯一的,索引和数据存储在一起,非聚簇索引指索引和数据没有放一起,类如书本后的附录目录。
因为mysql 的自增id , 正好是mysql的聚簇索引的数据的物理存放顺序和索引存放顺序是一致的。只要索引是相邻的,那么在磁盘上的位置也是相邻的,如果不是自增的情况,那么会出现更多次的磁盘io情况。