1、关系型数据库和非关系型数据库区别,优缺点?
*** 是两种不同的数据存储方式。
关系型数据库(如Oracle、MySQL、SQL Server等):采用了关系模型来组织数据。它由二维表结构组成,每个表由行和列组成,行表示实体,列表示实体的属性。关系型数据库通常使用SQL语言进行数据操作。
非关系型数据库(如Redis、MongoDB、HBase):采用了非关系模型来组织数据。非关系模型通常采用键值对、文档、图形等数据结构来存储数据,没有固定的数据表结构,可以灵活地存储不同类型的数据。非关系型数据库通常使用多种编程语言进行开发。
关系型数据库与非关系型数据库的区别体现在数据存储方式、扩展方式、数据查询语言、适用场景的不同。具体可以看上面内容。
-
关系型数据库的优点:数据结构清晰、易于理解和维护,支持事务处理,能够保证数据的完整性和一致性,并且支持多用户访问
-
非关系型数据库的优点:具有较好的扩展性和性能,对于非结构化数据的存储和处理能力较强,并且具有较好的灵活性和敏捷性
-
关系型数据库的缺点:(与非关系型数据库的优点相反)
-
非关系型数据库的缺点:数据结构不够清晰,难以理解和维护,不支持事务处理,容易出现数据完整性和一致性问题,且不够安全,容易受到攻击和数据泄漏
2、一条SQL查询语句是如何执行的?
- 通过连接器跟客户端建立连接
- 通过查询缓存查询之前是否有查询过该 sql
- 有则直接返回结果
- 没有则执行第三步
- 通过分析器分析该 sql 的语义是否正确,包括格式,表等等
- 通过优化器优化该语句,比如选择索引,join 表的连接顺序
- 验证权限,验证是否有该表的查询权限
- 没有则返回无权限的错误
- 有则执行第六步
- 通过执行器调用存储引擎执行该 sql,然后返回执行结果
3、MySQL的数据类型有哪些?
- 数值型:包括整数类型(int)、小数类型(tinyint)、浮点数类型(float)等。
- 字符型:包括定长字符串类型、变长字符串类型、文本类型、枚举类型等。
- 日期时间型:date、time、datetime、timestamp
此外,MySQL还支持一些其他的数据类型,例如二进制数据类型、JSON数据类型等。
4、MySQL 支持哪些存储引擎?默认使用哪个?
- Memory
- InnoDB(从MySQL5.5.8开始,为默认存储引擎)
- MyISAM(在MySQL5.5.8以前,为默认存储引擎)
- Federated
- Blackhole
- ...
可通过show engines 命令来查看 MySQL 支持的所有存储引擎;可通过 select version() 命令查看 MySQL 版本。
| 特征 | MyISAM | InnoDB | MEMORY |
|---|---|---|---|
| 事务安全 | 不支持 | 支持 | 不支持 |
| 锁机制 | 表锁 | 表锁/行锁 | 表锁 |
| 外键 | 不支持 | 支持 | 不支持 |
InnoDB
- 介绍
- InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。
- 特点
- DML操作遵循ACID模型,支持事务
- 行级锁,提高并发访问性能
- 支持外键 FOREIGN KEY约束,保证数据的完整性和正确性
- 文件
- xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。
- xxx.frm存储表结构(MySQL8.0时,合并在表名.ibd中)
5、MyISAM 和 InnoDB 有什么区别?
6、MyISAM 和 InnoDB 如何选择?
一般情况下,选择InnoDB存储引擎可以获得更好的数据完整性、一致性和并发性能,适用于高并发、事务处理等场景。而选择MyISAM存储引擎则适用于只读或只追加数据的场景,如报表和日志文件等应用。需要注意的是,MyISAM不支持事务和外键,所以在数据完整性和一致性要求高的场景中,应选择InnoDB存储引擎。
7、数据库三大范式
-
第一范式:数据库中的字段具有原子性,不可再拆分,并且是单一职责(强调原子性)
-
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。例如订单表里,存储了商品信息(商品价格、商品类型),那就需要把商品ID和订单ID作为联合主键,才满足第二范式。
-
第三范式:建立在第一,第二范式的基础上,确保每列都和主键列直接相关,而不是间接相关不存在其他表的非主键信息
在我们的日常开发当中,并不是所有的表一定要满足三大范式,有时候冗余几个字段可以少关联几张表,带来的查询效率的提升有可能是质变的