1. 请简述常用的索引有哪些种类,以及在mysql数据库中索引的工作机制是什么?
(1)索引的常见种类:
1)普通索引
即针对数据库表创建索引
2)唯一索引
与普通索引类似,不同的就是:MySQL数据库索引列的值必须唯一,但允许有空值
3)主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引
4)组合索引
为了进一步榨取MySQL的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。
(2)索引的工作机制
1)索引的实现结构和作用简介:
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
2)索引的工作机制示意图和机制简介:
示意图:机制解释:
上边的示意图展示了一种可能的索引方式。左边是数据表,一共有两列三行,最左边的是数据记录的物理地址(逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快列2的数据的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找树,更快的获取到相应数据。
2. MySQL常见的两种存储引擎:MyISAM和InnoDB,两者的核心区别?
1)InnoDB支持事物,而MyISAM不支持事物
2)InnoDB支持行级锁,而MyISAM支持表级锁
3)InnoDB支持MVCC, 而MyISAM不支持
4)InnoDB支持外键,而MyISAM不支持
5)InnoDB不支持全文索引,而MyISAM支持。
3. 触发器的概念、存储过程的概念?以及两者的区别?
(1) 触发器的概念
它是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的储存过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
(2)存储过程的概念
它是在大型数据库系统中,一组为了完成特定功能的SQL 语句集。存储过程在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
(3)两者的区别
1)触发器不能用EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行
2)触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用
4. Mysql的存储引擎InnoDB的行锁实现的类型以及实现的原理
(1)实现的类型:
InnoDB实现了以先两种类型的行锁:
共享锁(S):允许一个事务去读一行,阻止其他事务获取相同数据集的排他锁。
排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。
(2)实现的原理:
InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,innoDB才使用行级锁,否则InnoDB将使用表锁。
MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的?
举例如下:
select * from person where id = 6 for update;
for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,
如果 id 不是索引键那么InnoDB将完成表锁。
5. 请详细解释如下概念:主键 超键 候选键 外键
(1)主 键:
数据库表中的唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
(2)超 键:
在关系中能唯一标识元组的属性集称为关系模式的超键。
(3)候选键:
是最小超键,即不含有多余属性的超键称为候选键
(4)外 键:
如果关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键则该属性集是关系模式R1的外键。
6. Mysql的查询缓存的使用和原理?
(1)mysql中查看当前缓存相关参数的语句:
SHOW VARIABLES LIKE '%query_cache%';
查询结果如下:
(2)参数解释和使用:
1)query_cache_type
查询缓存类型,有0、1、2三个取值。0则不使用查询缓存。1表示始终使用查询缓存。2表示按需使用查询缓存。
2)query_cache_type
查询缓存类型,有0、1、2三个取值。0则不使用查询缓存。1表示始终使用查询缓存。2表示按需使用查询缓存。
设置query_cache_size的值:
SET GLOBAL query_cache_size = 1536815;
(3)查询缓存的使用原理:
查询缓存可以看做是SQL文本和查询结果的映射。如果第二次查询的SQL和第一次查询的SQL完全相同且开启了查询缓存,那么第二次查询就直接从查询缓存中取结果
欢迎大家关注该微信公众号