天天看点

Linux面试mysql

Linux运维工程在一般面试的时候都会问那些专业性的问题?今天给大家分享面试mysql中常问的一些问题,分享给大家。

1.MySQL 表的存储引擎有哪些?它们之间有什么区别?

MyISAM:默认的存储引擎,不支持事务,但对于读密集型的应用性能较好。

InnoDB:支持事务、行级锁定、外键约束等特性,适合于写密集型应用。

Memory:将表存储在 RAM 中,适合于小数量的数据、临时表或缓存等场景。

Archive:适合于仅插入和查询数据,但不对数据进行更新和删除的场景。

NDB Cluster:支持分布式数据库、高可用性等特性,适合于高并发、高可用的应用。

2.MySQL 的 ACID 是什么意思?

ACID 是指数据库事务必须满足原子性、一致性、隔离性和持久性四个特性。具体解释如下:

原子性(Atomicity):事务中的所有操作,要么全部完成,要么全部失败回滚。

一致性(Consistency):事务执行前后,数据保持一致。

隔离性(Isolation):多个并发的事务彼此隔离,不能相互干扰。

持久性(Durability):事务完成后,对数据库的修改被永久保存到磁盘上,不会因为系统故障而丢失。

3.MySQL 中索引的作用是什么?有哪些类型的索引?

索引是一种数据结构,可以加速数据的查找和排序。MySQL 支持以下几种类型的索引:

主键索引:用于唯一标识表中的每一行记录。

唯一索引:确保每一个索引键值只对应一行记录。

普通索引:基本的索引类型,没有特殊的限制和约束。

全文索引:针对文本类型的字段进行全文搜索。

4.介绍一下 MySQL 中的事务隔离级别及各自的特点?

MySQL 中的事务隔离级别有四种,分别为 READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ 和 SERIALIZABLE。它们之间的区别如下所示:

READ-UNCOMMITTED:最低的隔离级别,在此级别下,事务可以读取未提交的数据,可能会产生脏读、不可重复度和幻读的问题。

READ-COMMITTED:已提交读,针对同一行数据多次读取可能会产生不可重复度和幻读的问题。

REPEATABLE-READ:可重复读,保证同一事务中对同一行数据的多次读取结果一致,但不能避免幻读的问题。

SERIALIZABLE:最高的隔离级别,完全解决了脏读、不可重复度和幻读的问题,但性能较差。

5.MySQL 中 InnoDB 存储引擎是如何实现 MVCC 的?

InnoDB 的 MVCC(Multiversion Concurrency Control)是通过在每一行记录后面保存两个隐藏的列来实现的,分别为创建版本号和删除版本号。InnoDB 使用创建版本号判断哪些版本是有效的,使用删除版本号判断哪些版本已经被删除。通过这种方式,可以在不加锁的情况下实现并发访问,提高数据库的并发处理性能。

6.MySQL 中的视图是什么?有什么作用?

视图是一种虚表,它基于 SQL 查询语句创建,并且可以像普通表一样被查询和操作。视图 可以简化复杂的查询操作,隐藏复杂的数据结构,提供更好的数据抽象。此外,视图还可以用于保护数据的安全性,控制数据的访问范围。

7.MySQL 有哪些常见的优化方法?

使用索引:确保常用查询使用合适的索引。

避免使用‘SELECT *’:只查询需要的字段,减少不必要的IO开销。

尽量避免使用子查询:子查询另外一段SQL语句执行,效率较低,可以用 JOIN 代替。

分解大的 SQL 语句:将大的 SQL 语句拆分成多个小的语句,可以减少锁定的时间。

控制事务的开销:尽量使用短的事务并减少事务的开销。

避免全表扫描和排序:全表扫描和排序需要大量的 IO 开销,应该尽量避免使用。

应用程序级缓存:利用应用程序级缓存可以减少数据库的访问次数,提高查询性能。

8.MySQL 中如何检查表是否存在?如果不存在如何创建新表?

可以使用命令 SHOW TABLES LIKE 'table_name' 检查表是否存在。如果查询返回结果为空,说明表不存在。可以使用 CREATE TABLE 语句来创建新表。

9.MySQL 中 BLOB 和 TEXT 类型的区别是什么?

BLOB 和 TEXT 类型都用于存储大文本数据,它们的区别在于存储方式不同。BLOB 类型将二进制数据以类似于文件的形式存储在二进制形式中,而 TEXT 类型则将文本以字符集编码的形式存储。因此,BLOB 类型适用于存储图片、音频和视频等二进制数据,而 TEXT 类型适用于存储较短的文本数据。

10.对于大量数据的插入,我们应该如何提高插入性能?

可以采用如下的优化措施:

批量插入:使用 INSERT INTO ... VALUES (),(),() ... 的方式一次性插入多条数据,可以减少网络 IO 开销,提高插入性能。

关闭索引:在大量数据插入完成后,再开启索引,可以避免索引维护的开销对插入性能的影响。

使用 LOAD DATA INFILE:使用该命令可以一次性导入一个文件中的数据,速度很快。

优化 SQL 语句:可以通过删除不必要的语句和字段,减小插入数据的大小,提高插入性能。

11.MySQL 中的主从同步是什么?有什么用途?

主从同步是 MySQL 中一种常用的数据复制技术,它将一个 MySQL 服务器(称为主服务器)上的数据复制到另一个 MySQL 服务器(称为从服务器)。主从同步技术可以用于数据备份、读写分离、负载均衡等场景。

12.MySQL 中如何使用 JOIN 实现表的关联查询?

JOIN 是一种 SQL 连接操作,可以将两个或多个表中符合特定条件的行组合到一起。MySQL 支持 INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)及 FULL OUTER JOIN(全连接)等不同类型的 JOIN 操作。使用JOIN实现表的关联查询需要指定要连接的表及条件。例如:

SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id;           

该查询将从 table1 和 table2 表中查找 id 列相等的所有行,并将它们按照相应的列连接起来。

13.如何优化 SELECT 语句的性能?

可以采用以下措施来优化 SELECT 语句的性能:

使用适当的索引。

减少查询返回的行数,使用 LIMIT 限制返回的行数。

避免使用 SELECT * 查询所有列的数据,只查询需要的列数据。

避免使用 DISTINCT 关键字,如果可以使用 GROUP BY 代替。

避免使用子查询。

14.MySQL 中 LOCK TABLES 的作用是什么?

LOCK TABLES 用于锁定一个或多个数据库表,以防止其他会话对其进行更改。该命令主要用于备份数据库、表维护等场景。在使用 LOCK TABLES 命令时,需要注意以下两点:

在锁定表时,其他线程无法与该表进行交互,包括查询和更新等操作。

在解除锁定后,将自动释放所有为该线程分配的内存和临时表。

15.如何在 MySQL 中使用子查询?

子查询是指在一个 SQL 语句中嵌套另一个 SQL 语句,常用于对数据进行筛选和分类。在 MySQL 中可以使用以下语法来创建子查询:

SELECT column1, column2
FROM table1
WHERE column3 IN (SELECT column4 FROM table2);           

该查询将获取 table1 表中 column3 列值等于 table2 表的

16.Mysql中如何创建触发器?

可以使用CREATE TRIGGER语句来创建触发器。

创建一个触发器,在插入数据时同时向另一张表中插入相应信息可以使用如下语句:

CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW INSERT INTO 
another_table (column1, column2) VALUES (NEW.column1, NEW.column2);           

17.Mysql中如何设置连接超时和执行超时时间?

可以在连接字符串中设置连接超时时间,可以使用SET语句设置执行超时时间

mysql --connect_timeout=10 -u root -p my_database; SET max_execution_time = 300;           

整理不易,欢迎转发点赞收藏,关注我每天分享运维知识

Linux面试mysql

继续阅读