数据库书写

 

 

什么是子查询?子查询有哪些类型?
子查询(subquery)是指嵌套在其他语句(SELECT、INSERT、UPDATE、DELETE)中的 SELECT 语句。

 什么是数据库规范化,有哪些常见的数据库范式?

答案:数据库规范化是一种数据库设计的方法,用于有效地组织数据,减少数据的冗余和相互之间的依赖,增加数据的一致性。由于非规范化的数据库存在冗余,可能导致数据的插入、删除、修改异常等问题,因此引入了规范化过程。

数据库规范化的程度被称为范式(Normal Form),目前已经存在第一范式到第六范式,每个范式都是基于前面范式的增强。

  • 第一范式(First Normal Form),表中的每个属性都是单值属性,每个记录都唯一,也就是需要主键。举例来说,如果员工存在工作邮箱和个人邮箱,不能都放到一个字段,而需要拆分成两个字段;
  • 第二范式(Second Normal Form),首先需要满足第一范式,且不包含任何部分依赖关系。举例来说,如果将学生信息和选课信息放在一起,学号和课程编号可以作为复合主键;但此时学生的其他信息依赖于学号,即主键的一部分。通常使用单列主键可以解决部分依赖问题;
  • 第三范式(Third Normal Form),首先需要满足第二范式,并且不存在传递依赖关系。举例来说,如果将部门信息存储在每个员工记录的后面,那么部门名称依赖部门编号,部门编号又依赖员工编号,这就是传递依赖。解决的方法就是将部门信息单独存储到一个表中;
  • 更高的范式包括 Boyce-Codd 范式、第四范式、第五范式以及第六范式等,不过很少使用到这些高级范式。对于大多数系统而言,满足第三范式即可。

另外,反规范化(Denormalization)是在完成规范化之后执行的相反过程。反规范化通过增加冗余信息,减少 SQL 连接查询的次数,从而减少磁盘 IO 来提高查询时的性能。但是反规范化会导致数据的重复,需要更多的磁盘空间,并且增加了数据维护的复杂性。

数据库的设计是一个复杂的权衡过程,需要综合考虑各方面的因素。

什么是实体关系图(ERD)?

答案:实体关系图是一种用于数据库设计的结构图,它描述了数据库中的实体,以及这些实体之间的相互关系。实体代表了一种对象或者概念。例如,员工、部门和职位可以称为实体。每个实体都有一些属性,例如员工拥有姓名、性别、工资等属性。

关系用于表示两个实体之间的关联。例如,员工属于部门。三种主要的关系是一对一、一对多和多对多关系。例如,一个员工只能属于一个部门,一个部门可以有多个员工,部门和员工是一对多的关系。

ERD 也可以按照抽象层次分为三种:

  • 概念 ERD,即概念数据模型。概念 ERD 描述系统中存在的业务对象以及它们之间的关系。
  • 逻辑 ERD,即逻辑数据模型。逻辑 ERD 是对概念数据模型进一步的分解和细化,明确定义每个实体中的属性并描述操作和事务。
  • 物理 ERD,即物理数据模型。物理 ERD 是针对具体数据库的设计描述,需要为每列指定类型、长度、可否为空等属性,为表增加主键、外键以及索引等约束。

下图是我们使用的三个示例表的物理 ERD(基于 MySQL 实现):

 常见 SQL 数据类型有哪些?

答案:SQL 定义了大量的数据类型,其中最常见的类型包括字符类型、数字类型、日期时间类型和二进制数据类型。

  • 字符数据类型,分为固定长度的 CHAR(n) 、可变长度的 VARCHAR(n) 以及字符大对象 CLOB。
  • 数字数据类型,分为精确数字 INTEGER、BIGINT、NUMERIC 以及近似数字 FLOAT、DOUBLE PRECISION 等。
  • 日期时间类型,分为日期 DATE、时间 TIME 以及时间戳 TIMESTAMP 。
  • 二进制数据类型,主要是 BLOB。用于存储图片、文档等二进制数据。

主流的数据库都支持这些常见的数据类型,但是在类型名称和细节上存在一些差异。另外,SQL 还提供其他的数据类型,例如 XML、JSON 以及自定义的数据类型。

CHAR 和 VARCHAR 类型的区别?

答案:CAHR 是固定长度的字符串,如果输入的内容不够使用空格进行填充,通常用于存储固定长度的编码;VARCHAR 是可变长度的字符串,通常用于存储姓名等长度不一致的数据。Oracle 中使用 VARCHAR2 表示变长字符串。

DROP TABLE 和 TRUNCATE TABLE 的区别?

答案:DROP TABLE 用于从数据库中删除表,包括表中的数据和表结构自身。同时还会删除与表相关的的所有对象,包括索引、约束以及访问该表的授权。TRUNCATE TABLE 只是快速删除表中的所有数据,回收表占用的空间,但是会保留表的结构。

数据库事务支持哪些隔离级别?

答案:当数据库存在并发访问时,可能导致以下问题:

  • 更新丢失,当两个事务同时更新某一数据时,后者会覆盖前者的结果;
  • 脏读,当一个事务正在操作某些数据但并未提交时,如果另一个事务读取到了未提交的结果,就出现了脏读;
  • 不可重复读,第一个事务第一次读取某一记录后,该数据被另一个事务修改提交,第一个事务再次读取该记录时结果发生了改变;
  • 幻象读,第一个事务第一次读取数据后,另一个事务增加或者删除了某些数据,第一个事务再次读取时结果的数量发生了变化。

为了解决并发访问可能导致的问题,数据库提供了不同的事务隔离级别:

脏读

不可重复读

幻读

读未提交

可能

可能

可能

读已提交

不会

可能

可能

可重复读

不会

不会

可能

序列化

不会

不会

不会

Oracle 默认的隔离级别为 READ COMMITTED,MySQL 中 InnoDB 存储引擎的默认隔离级别为 REPEATABLE READ。

 MySQL 中的 InnoDB 和 MyISAM 存储引擎有什么区别?

答案:MySQL 的一大特点就是支持不同的存储引擎,存储引擎用于管理表中的数据并提供数据操作接口。MySQL使用以下命令查看系统支持的存储引擎:

SHOW ENGINES;

主要的存储引擎包括 InnoDB 和 MyISAM。自从 MySQL 5.5 版本之后,默认使用 InnoDB 存储引擎。

InnoDB 存储引擎支持事务(ACID),提供了事务提交、回滚以及故障恢复能力,能够确保数据不会丢失。InnoDB 支持行级锁和多版本一致性的非锁定读取,能够提高并发访问和性能。InnoDB 使用聚集索引存储数据,能够减少使用主键查找时的磁盘 I/O。另外,InnoDB 还支持外键约束,能够维护数据的完整性。

MyISAM 存储引擎数据文件占用的空间更小。MyISAM 采用表级锁,限制了同时读写的性能,通常用于只读或者以读为主的应用。

删除数据时,DELETE 和 TRUNCATE 语句的区别?

DELETE

TRUNCATE

用于从表中删除指定的数据行。

用于删除表中的所有行,并释放包含该表的存储空间。

删除数据后,可以提交或者回滚。

操作无法回滚。

属于数据操作语言(DML)。

属于数据定义语言(DDL)。

删除数据较多时比较慢。

执行速度很快。

通常来说,使用 DELETE 语句删除数据时需要指定一个 WHERE 条件,否则会删除表中所有的数据;使用 TRUNCATE 语句需要小心,因为它会直接清空数据。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值