以下是MySQL数据库的一些基础知识:
数据库基本概念
-
数据库:是按照一定数据结构组织、存储和管理数据的仓库,可将大量数据有条理地存储,便于查询和管理。
-
表:数据库中存储数据的基本单元,由行和列组成,类似Excel工作表,每行为一条记录,每列为一个字段。
-
数据类型:常见有整数类型(如INT、BIGINT)、浮点类型(如FLOAT、DOUBLE)、字符串类型(如CHAR、VARCHAR)、日期时间类型(如DATE、TIME、DATETIME)等,不同数据类型决定了数据的存储格式和取值范围。
数据库操作
-
创建数据库:使用 CREATE DATABASE 语句,如 CREATE DATABASE mydb; 创建名为mydb的数据库。
-
创建表:用 CREATE TABLE 语句,例如 CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50), age INT); 在当前数据库创建students表。
-
插入数据:通过 INSERT INTO 语句,如 INSERT INTO students (id, name, age) VALUES (1, ‘John’, 20); 向students表插入一条记录。
-
查询数据:用 SELECT 语句,如 SELECT * FROM students; 查询students表所有数据,还可通过 WHERE 子句添加条件过滤。
-
更新数据:使用 UPDATE 语句,如 UPDATE students SET age = 21 WHERE id = 1; 将id为1的学生年龄更新为21。
-
删除数据:用 DELETE FROM 语句,如 DELETE FROM students WHERE id = 1; 删除id为1的学生记录。
索引
-
索引作用:提高数据查询效率,类似书籍目录,能让数据库快速定位所需数据,减少数据检索时间。
-
索引类型:常见有普通索引、唯一索引、主键索引、组合索引等。普通索引加速数据查询;唯一索引保证索引列值唯一;主键索引是特殊唯一索引,不允许为空;组合索引基于多个列创建,可提高多列联合查询效率。
事务
-
事务定义:是数据库操作的逻辑单元,由一个或多个SQL语句组成,这些语句要么全部执行成功,要么全部回滚,保证数据一致性。
-
事务特性:即ACID特性,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
存储引擎
- 常见存储引擎:如InnoDB和MyISAM。InnoDB支持事务、行级锁,提供更好的并发处理能力和数据完整性,是MySQL默认存储引擎,适用于对事务要求高的场景;MyISAM不支持事务和行级锁,表级锁效率高,空间利用率低,适用于以读操作和插入操作为主、并发相对低的场景。
以下是一些MySQL数据库常见的面试题:
基础概念类
-
数据库的三大范式:第一范式(1NF)保证字段不可再分,保证原子性。第二范式(2NF)满足1NF前提下,表的每一列都必须和主键有关系,消除部分依赖关系。第三范式(3NF)满足2NF前提下,表的每一列必须和主键有直接关系,不能是间接关系,消除传递依赖。
-
char和varchar的区别:char是固定长度字符串,设置多少长度就是多少长度,空间利用率低但存取速度快,适用于身份证号、手机号等固定长度的字符串。varchar是可变长度字符串,空间利用率高但存取速度相对慢,适用于不固定长度的字符串。
索引类
-
B+树与B树、Hash索引的区别:B+树非叶子节点仅存储键值和指针,叶子节点通过链表连接,支持范围查询和顺序遍历,层数低,减少磁盘IO次数。B树非叶子节点存储数据,导致节点容量小,树高度更高,范围查询效率低。Hash索引仅支持等值查询,无法处理范围查询和排序,哈希冲突会影响性能。
-
最左前缀原则:对于联合索引,以最左边为起点任何连续的索引都能匹配上,同时遇到范围查询(>、<、between and、like)就会停止匹配。
事务与锁类
-
ACID特性及实现原理:原子性通过Undo Log实现,记录事务前的数据状态,用于回滚。持久性通过Redo Log实现,记录事务提交后的数据状态,用于崩溃恢复。隔离性通过MVCC(多版本并发控制)和锁机制实现。一致性由原子性、持久性和隔离性共同保证。
-
行锁与表锁的区别:表锁系统开销最小,会锁定整张表,MyISAM使用表锁。行锁最大程度支持并发处理,但也带来了最大的锁开销,InnoDB使用行锁。
查询优化类
-
如何查看SQL执行计划:使用explain关键字,如 explain select * from 表名 where 条件 。结果中的key表示使用的索引,type字段可以看到索引是全表扫描还是索引扫描等,type字段内容性能从低到高一般为ALL < index < range ~ index_merge < ref < eq_ref < const < system。
-
慢查询优化方法:开启慢查询,查看慢查询日志定位低效率SQL,使用explain查看SQL的执行计划看索引是否失效或者性能低,还可以进行SQL语句优化、索引优化和数据库结构优化等,如避免使用 SELECT * ,避免在 WHERE 子句中使用函数、 OR 运算符等。