黑狐家游戏

mysql数据库面试题基础知识,mysql数据库面试问题

欧气 4 0

《MySQL数据库面试:基础知识全解析》

mysql数据库面试题基础知识,mysql数据库面试问题

图片来源于网络,如有侵权联系删除

一、MySQL简介

MySQL是一个开源的关系型数据库管理系统,它在众多的Web应用开发中被广泛使用,它具有多平台支持的特性,能够在Linux、Windows、macOS等多种操作系统上运行,MySQL以其可靠性、易用性和高性能而著称。

二、数据类型

1、数值类型

- 整数类型:

- TINYINT:占用1个字节,范围是 - 128到127(有符号)或者0到255(无符号),在存储一些小型的计数数据,如用户点赞数(如果点赞数不会太大)时可以使用。

- INT:占用4个字节,范围是 - 2147483648到2147483647(有符号),0到4294967295(无符号),它是最常用的整数类型,用于存储一般的整数数据,如用户的ID等。

- BIGINT:占用8个字节,用于存储非常大的整数,例如在处理海量数据的统计计数场景下。

- 小数类型:

- FLOAT:单精度浮点数,占用4个字节,它在存储一些对精度要求不是极高的小数数据时使用,例如一些近似的统计数据。

- DOUBLE:双精度浮点数,占用8个字节,精度比FLOAT更高,适合存储需要更高精度的小数数据,如科学计算中的数据。

- DECIMAL:用于存储精确的小数,它以字符串形式存储数值,能够准确地表示货币等对精度要求极高的数据,例如在财务系统中存储金额数据时,使用DECIMAL类型可以避免浮点数计算带来的精度损失。

2、字符串类型

- CHAR:定长字符串类型,例如定义CHAR(10),如果存储的字符串长度小于10,会用空格填充到10个字符的长度,它适合存储固定长度的数据,如身份证号码(如果不考虑未来可能的位数变化)。

- VARCHAR:变长字符串类型,它只占用实际存储字符串的空间加上1 - 2个字节用于存储字符串长度信息,在存储用户名、密码等长度不固定的字符串时非常合适。

- TEXT:用于存储大量的文本数据,有TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT等不同大小的类型,可以根据实际需要存储的文本量来选择,例如存储文章内容、用户评论等较长的文本信息。

3、日期和时间类型

- DATE:用于存储日期,格式为'YYYY - MM - DD',如存储用户的生日等日期信息。

- TIME:用于存储时间,格式为'HH:MM:SS',可用于记录事件发生的时间点(如果不需要日期信息)。

- DATETIME:存储日期和时间,格式为'YYYY - MM - DD HH:MM:SS',例如记录订单的创建时间等。

- TIMESTAMP:也用于存储日期和时间,但它的取值范围比DATETIME小,并且在表中有更新操作时,TIMESTAMP类型的字段会自动更新为当前时间,常用于记录数据的最后修改时间。

三、索引

1、索引的作用

- 索引就像一本书的目录,它能够加快数据库的查询速度,通过创建索引,MySQL不需要对整个表进行全表扫描来查找数据,而是可以根据索引快速定位到符合条件的数据行,在一个包含大量用户信息的表中,如果经常根据用户的姓氏来查询用户,那么在姓氏字段上创建索引就可以大大提高查询效率。

2、索引的类型

- B - Tree索引:这是MySQL中最常用的索引类型,它以B - Tree结构存储数据,这种结构能够保证在对数时间复杂度内查找数据,B - Tree索引适用于大多数情况,如在普通的数值、字符串字段上创建索引。

- Hash索引:Hash索引是基于哈希表实现的,它的查找速度非常快,但是它只能用于等值查询,不支持范围查询,在有大量重复值的情况下,Hash索引的效率会降低,一般在内存数据库或者对查询速度要求极高的特定场景下使用。

- 全文索引:用于在文本数据中进行全文搜索,例如在一个存储文章内容的表中,如果要搜索文章中包含特定关键词的文章,就可以使用全文索引,MySQL提供了FULLTEXT索引类型来支持全文搜索,但是它对存储引擎有一定的要求,InnoDB引擎从MySQL 5.6版本开始支持全文索引。

四、SQL语句基础

1、数据定义语言(DDL)

- 创建表(CREATE TABLE):例如创建一个名为users的表,包含id(INT类型,主键)、name(VARCHAR类型)和age(INT类型)字段,可以使用以下语句:

```sql

CREATE TABLE users (

id INT PRIMARY KEY,

name VARCHAR(50),

age INT

);

```

mysql数据库面试题基础知识,mysql数据库面试问题

图片来源于网络,如有侵权联系删除

- 修改表(ALTER TABLE):如果要在上面创建的users表中添加一个新的字段email(VARCHAR类型),可以使用:

```sql

ALTER TABLE users ADD COLUMN email VARCHAR(100);

```

- 删除表(DROP TABLE):如果要删除users表,可以使用:

```sql

DROP TABLE users;

```

2、数据操作语言(DML)

- 插入数据(INSERT INTO):向users表中插入一条数据,

```sql

INSERT INTO users (id, name, age) VALUES (1, 'John', 25);

```

- 更新数据(UPDATE):如果要将id为1的用户年龄更新为30,可以使用:

```sql

UPDATE users SET age = 30 WHERE id = 1;

```

- 删除数据(DELETE FROM):删除id为1的用户数据,可以使用:

```sql

DELETE FROM users WHERE id = 1;

```

3、数据查询语言(DQL)

- 简单查询:查询users表中的所有数据,可以使用:

```sql

SELECT * FROM users;

```

- 条件查询:查询年龄大于20岁的用户,可以使用:

```sql

SELECT * FROM users WHERE age > 20;

```

- 多表查询:如果有另外一个orders表,其中包含user_id字段关联到users表的id字段,要查询用户及其订单信息,可以使用内连接(INNER JOIN):

```sql

SELECT users.name, orders.order_number

FROM users

INNER JOIN orders ON users.id = orders.user_id;

```

五、事务

1、事务的概念

mysql数据库面试题基础知识,mysql数据库面试问题

图片来源于网络,如有侵权联系删除

- 事务是一组数据库操作,这些操作要么全部成功执行,要么全部不执行,例如在银行转账系统中,从一个账户转出金额和向另一个账户转入金额这两个操作必须作为一个事务来处理,如果转出操作成功而转入操作失败,那么整个转账操作就应该回滚,以保证数据的一致性。

2、事务的特性(ACID)

- 原子性(Atomicity):事务中的所有操作是一个不可分割的整体,要么全部执行成功,要么全部失败回滚。

- 一致性(Consistency):事务执行前后,数据库的状态必须保持一致,例如在转账操作中,转账前后系统的总金额不变。

- 隔离性(Isolation):多个事务并发执行时,它们之间应该相互隔离,互不干扰,不同的隔离级别会影响事务之间的可见性和并发性能。

- 持久性(Durability):一旦事务提交成功,其对数据库的修改就应该是永久性的,即使系统出现故障也不会丢失。

3、事务的操作

- 在MySQL中,可以使用BEGIN、COMMIT和ROLLBACK语句来控制事务。

```sql

BEGIN;

-- 执行一系列数据库操作,如UPDATE、INSERT等

COMMIT; -- 如果操作全部成功,提交事务

```

如果在操作过程中出现错误,可以使用ROLLBACK语句回滚事务:

```sql

BEGIN;

-- 执行一些操作

-- 如果出现错误

ROLLBACK;

```

六、存储引擎

1、InnoDB

- InnoDB是MySQL默认的存储引擎,从MySQL 5.5版本开始,它支持事务、行级锁和外键约束,行级锁使得在多用户并发访问时能够提供更好的并发性能,例如在一个高并发的电商系统中,多个用户同时对不同的商品进行下单操作,InnoDB的行级锁可以确保每个订单操作的独立性,减少锁冲突,InnoDB的外键约束有助于维护数据库的完整性,确保表之间关系的正确性。

2、MyISAM

- MyISAM存储引擎不支持事务和行级锁,但是它的查询速度在一些简单的查询场景下可能比InnoDB快,MyISAM适合于以读操作为主的应用场景,例如一些数据仓库中的静态数据存储,它在表结构上有三个文件:.frm(表定义文件)、.MYD(数据文件)和.MYI(索引文件),不过,由于不支持事务,在数据更新频繁且需要保证数据一致性的场景下不适合使用MyISAM。

七、数据库设计原则

1、范式

- 第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项,一个存储用户地址的字段如果包含省、市、区等多个信息,就不符合1NF,应该将其拆分成多个字段。

- 第二范式(2NF):在满足1NF的基础上,要求非主属性完全依赖于主键,例如在一个订单表中,如果主键是订单ID,而订单中的商品信息(如商品名称、价格等)不完全依赖于订单ID(因为一个订单可能包含多个商品),那么就不符合2NF,需要对表进行拆分。

- 第三范式(3NF):在满足2NF的基础上,要求非主属性不传递依赖于主键,遵循范式可以减少数据冗余,提高数据库的存储效率和数据的一致性。

2、表关系设计

- 一对一关系:可以将两个实体的数据存储在同一张表中(如果数据量不大且联系紧密),或者使用外键关联,并且在其中一个表的外键上设置唯一性约束,一个用户和他的详细个人资料可以采用一对一关系设计。

- 一对多关系:在多的一方表中设置外键指向一的一方的主键,一个部门有多个员工,在员工表中设置外键指向部门表的主键。

- 多对多关系:需要创建一个中间表,中间表包含两个实体的主键作为外键,以建立多对多的关系,学生和课程之间的关系,中间表可以包含学生ID和课程ID两个字段。

MySQL数据库的基础知识涵盖了数据类型、索引、SQL语句、事务、存储引擎和数据库设计等多个方面,在面试中,对这些基础知识的深入理解和掌握能够帮助求职者更好地应对相关问题,展示自己的技术实力。

标签: #MySQL #面试题 #基础知识 #面试问题

黑狐家游戏
  • 评论列表

留言评论