数据库 基础面试第一弹

1. SQL语句类型

1. DDL(Data Definition Language,数据定义语言):

DDL语句用于定义数据库对象(如表、索引、视图等)。常见的DDL语句包括:

  CREATE:用于创建数据库对象,如创建表、索引、视图等。

  ALTER:用于修改数据库对象的结构,如修改表的列、添加约束等。

  DROP:用于删除数据库对象,如删除表、索引、视图等。

  TRUNCATE:用于删除表中的所有数据,但保留表结构

DDL(数据定义语言)示例:

# 创建表

CREATE TABLE employees (

  id INT PRIMARY KEY,

  name VARCHAR(100),

  age INT,

  salary DECIMAL(10, 2)

);

# 修改表结构

ALTER TABLE employees ADD COLUMN department VARCHAR(50);

DROP TABLE employees; #删除表

2. DML(Data Manipulation Language,数据操作语言):

DML语句用于对数据库中的数据进行操作(插入、更新、删除)。常见的DML语句包括:

  • SELECT:用于从数据库中查询数据。
  • INSERT:用于向表中插入新的数据。
  • UPDATE:用于更新表中的数据。
  • DELETE:用于删除表中的数据。

DML(数据操作语言)示例:

1

2

3

4

5

6

7

INSERT INTO employees (id, name, age, salary)

VALUES (1, 'John Doe', 30, 5000);  # 插入数据

UPDATE employees SET salary = 6000 WHERE id = 1; #更新数据

DELETE FROM employees

WHERE id = 1;  # 删除数据

3. DQL(Data Query Language,数据查询语言):

DQL语句用于从数据库中查询数据。DQL语句的核心是SELECT语句,可以使用SELECT语句查询满足特定条件的数据,并对结果进行排序、分组等处理

DQL(数据查询语言)示例:

1

2

3

4

5

6

7

SELECT FROM employees;

SELECT FROM employees

WHERE age > 25;     # 查询特定条件的数据

SELECT name, salary FROM employees; # 查询特定列的数据

4. DCL(Data Control Language,数据控制语言)

DCL语句用于对数据库的访问权限进行管理。常见的DCL语句包括:

  • GRANT:用于授予用户访问权限。
  • REVOKE:用于撤销用户的访问权限。
  • DENY:用于拒绝用户的访问权限。

DCL(数据控制语言)示例:

1

2

3

4

5

GRANT SELECTINSERT ON employees TO user1;  #授予用户访问权限

REVOKE SELECTINSERT ON employees FROM user1; # 撤销用户的访问权限

DENY SELECTINSERT ON employees TO user1; # 拒绝用户的访问权限

2. 索引作用,底层结构及常见类型

索引在数据库中起着重要的作用,它可以提高数据库的查询性能和数据的检索速度。索引是一种数据结构,用于快速定位和访问数据库中的特定数据。

作用:

  • 提高查询性能:通过使用索引,可以减少数据库查询的数据量,从而提高查询速度。
  • 加速数据检索:索引可以帮助数据库快速定位和访问满足特定条件的数据,减少数据的扫描时间。

底层结构:
数据库索引的底层结构可以有多种实现方式,常见的包括以下几种:

  1. B-树(B-Tree)索引:B-树是一种平衡的多路搜索树,它的特点是可以自动调整树的结构以适应数据的插入和删除操作。B-树索引常用于磁盘存储的数据库,因为它可以减少磁盘访问次数,提高查询效率。

  2. B+树(B+Tree)索引:B+树是在B-树的基础上进行优化的一种数据结构。它与B-树类似,但在叶子节点上存储了所有的关键字和对应的数据指针,这样可以加快范围查询和顺序访问的速度。B+树索引是大多数关系型数据库中最常用的索引类型。

  3. 哈希(Hash)索引:哈希索引使用哈希函数将关键字映射到一个固定长度的哈希值,然后将哈希值与数据的存储位置关联起来。哈希索引适用于等值查询,但不适用于范围查询或排序操作。

  4. 全文(Full-Text)索引:全文索引用于对文本内容进行搜索,它可以对文本字段中的关键词进行索引和检索,支持全文搜索和模糊匹配。

常见类型:
在常见的关系型数据库中,常用的索引类型包括:

    1. 主键索引(Primary Key Index):用于唯一标识表中的记录,保证主键的唯一性和索引的快速访问。

    2. 唯一索引(Unique Index):用于保证某个列或列组合的唯一性,可以加速唯一性检查。

    3. 聚集索引(Clustered Index):指定表的物理顺序,表中的记录按照聚集索引的顺序存储。

    4. 非聚集索引(Non-Clustered Index):不指定表的物理顺序,独立存储索引的数据结构。

    5. 复合索引(Composite Index):使用多个列组合作为索引的键,支持多个列的联合查询。

    6. 全文索引(Full-Text Index):用于全文搜索和模糊匹配的索引类型,支持对文本内容进行搜索。

3. 事务的特性

  1. 原子性(Atomicity):事务是一个原子操作单元,要么全部执行成功,要么全部失败回滚。原子性确保事务中的所有操作要么全都执行,要么全都不执行,不会出现部分操作成功而部分操作失败的情况。

  2. 一致性(Consistency):事务在执行之前和执行之后,数据库的完整性约束没有被破坏。一致性确保数据库从一个一致的状态转移到另一个一致的状态,它定义了数据在事务执行过程中的合法变化。

  3. 隔离性(Isolation):事务的执行是相互隔离的,一个事务的操作不会被其他并发事务所干扰。隔离性确保事务在并发执行时,每个事务的操作都像是在独立执行,避免了并发读写操作导致的数据不一致问题。

  4. 持久性(Durability):一旦事务提交,其所做的修改将永久保存在数据库中,即使系统发生故障或重启。持久性确保事务提交后的修改是永久性的,不会因为系统故障而丢失。

4. 事务的隔离级别

  1. 读未提交(Read Uncommitted):

    • 最低的隔离级别,事务中的未提交修改对其他事务都是可见的。
    • 可能导致脏读(Dirty Read),即读取到其他事务尚未提交的数据,可能是不一致的数据。
    • 存在幻读(Phantom Read),即在同一个事务中多次执行同样的查询,结果集不一致。
  2. 读已提交(Read Committed):

    • 事务只能读取到已经提交的数据,未提交的数据对其他事务不可见。
    • 避免了脏读的问题,但仍可能导致幻读。
    • 大多数常见数据库的默认隔离级别。
  3. 可重复读(Repeatable Read):

    • 保证了在同一事务中多次读取同一数据时,结果保持一致。
    • 读取的数据是在事务开始时确定的快照,即使其他事务对数据进行修改也不可见。
    • 避免了脏读和幻读的问题。
  4. 序列化(Serializable):

    • 最高的隔离级别,通过强制事务串行执行来避免并发问题。
    • 保证了事务之间的完全隔离,避免了脏读、幻读和不可重复读的问题。
    • 性能较差,一般情况下只在特殊需求下使用。

5. 事务并发引起的三大问题

  1. 脏读(Dirty Read):

    • 脏读指的是一个事务读取了另一个事务尚未提交的数据。当一个事务读取到了被另一个事务修改但尚未提交的数据时,如果另一个事务最终回滚,则读取到的数据是无效的。
    • 脏读可能导致数据不一致性和错误的结果。
  2. 不可重复读(Non-repeatable Read):

    • 不可重复读指的是在同一个事务中,多次读取同一数据时,得到的结果不一致。这是因为在读取过程中,其他并发事务对该数据进行了修改或删除。
    • 不可重复读可能导致事务在多次读取同一数据时无法保持一致性,破坏了事务的隔离性。
  3. 幻读(Phantom Read):

    • 幻读是指在同一个事务中,多次执行同样的查询,得到的结果集不一致。这是因为在查询过程中,其他并发事务插入了新的数据行,导致结果集发生了变化。
    • 幻读可能导致事务在同一查询中读取到不同的数据行,无法保持一致性。

6. 死锁的原因及解决办法:

死锁是指两个或多个事务因为互相等待对方释放资源而无法继续执行的状态。死锁的发生是由于以下原因之一或多个原因共同作用:

  1. 互斥条件(Mutual Exclusion):资源只能同时被一个事务占用,当某个事务占用了一个资源后,其他事务无法同时占用该资源。

  2. 请求与保持条件(Hold and Wait):一个事务在持有资源的同时,又申请其他事务所占有的资源。

  3. 不可剥夺条件(No Preemption):资源只能由持有者显式释放,其他事务无法强制抢占。

  4. 循环等待条件(Circular Wait):多个事务形成一个循环等待资源的链,每个事务都在等待下一个事务所占有的资源。

为了解决死锁问题,可以采取以下几种常用的解决办法:

  1. 预防死锁(Deadlock Prevention):

    • 通过破坏死锁发生的四个必要条件中的一个或多个,来预防死锁的发生。
    • 可以在系统设计阶段采用资源分配策略、事务调度策略等方式来预防死锁。
  2. 避免死锁(Deadlock Avoidance):

    • 在运行时动态判断是否分配资源,避免可能导致死锁的资源分配情况。
    • 通过资源分配的安全性检查和资源请求的合理判断,避免进入可能导致死锁的状态。
  3. 检测与恢复(Deadlock Detection and Recovery):

    • 允许死锁发生,但通过周期性地检测系统中的死锁状态,并采取恢复措施来解除死锁。
    • 可以使用图算法(如资源分配图)来检测死锁,并通过回滚、抢占资源等方式进行恢复。
  4. 死锁忽略(Deadlock Ignorance):

    • 假设死锁很少发生或发生死锁的代价较低,可以忽略死锁问题,不采取专门的死锁处理措施。
    • 此方法适用于某些特定环境下,如批处理系统等。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全 | Misc】Training-Stegano-1

该题考察winhex工具使用 打开文件: 使用StegSolve并不能获取有效信息 使用winhex得到flag steganoI

【Linux系统化学习】进程终止的奥秘

个人主页点击直达:小白不是程序媛 Linux专栏:Liunx系统化学习 代码仓库:Gitee 目录 获取函数返回值 退出码 进程退出的场景 错误码 信号终止异常代码 进程的终止 main函数直接return exit函数 _exit函数 获取函数返回值 在C语言学…

玩转区域流量调配,详细解析GLSB是什么?

在互联网早期,由于网络不是很发达,流量也相对比较小,单体架构已经能足够满足需求。但伴随着互联网越来越,网站的流量请求甚至能达到上千亿。为了实现高可用,需要用到多台机器来提升处理流量的能力。在这种环境下&#…

PIE-Engine简介

PIE-Engine,是航天宏图基于云计算、物联网、大数据和人工智能技术自主研发的一站式地球科学大数据实时计算平台,平台构建了基于云原生的并行高效底层架构,助力地球科学应用的产业化发展。(摘自官网) 前天,我…

web前端开发网页制作html/css结课作业

效果图展示: 注意事项: 引用JQuery文件地址和图片地址要更换一下。 百度网盘链接: http://链接:https://pan.baidu.com/s/1wYkmLr7csjBwQY6GmlYm4Q?pwd4332 提取码:4332 html界面展示: main.css代码部…

写给工作6年的程序员的一封信

准大牛 ;兄, 希望你不会反感我给你的这个特别的称号,我们程序员中的大部分工作到5~6年这个节骨眼上,不出意外的话…准大牛…了,此时的你技术能力正在成熟或者已然成熟;架构设计力初现峥嵘;创新能…

Linux中磁盘管理与文件系统

目录 一.磁盘基础: 1.磁盘的结构: 2.硬盘的数据结构: 3.硬盘存储容量 : 4.硬盘接口类型: 二.MBR与磁盘分区: 1.MBR的概念: 2.硬盘的分区: 为什么分区: 2.表示&am…

10-让Java性能提升的JIT深度剖析

文章目录 JVM的语言无关性解释执行与JITC1、C2与Graal编译器C1编译器C2编译器 分层编译(了解即可)热点代码热点探测方法调用计数器回边计数器 编译优化技术方法内联锁消除标量替换逃逸分析技术逃逸分析的原理逃逸分析 JVM的语言无关性 跨语言(语言无关性&#xff0…

浅谈技术架构的演进过程

前言 最近在学习Redis、Doctor相关技术知识,它们与分布式系统有着很大的关系。 而对于分布式系统,它本身就是随着业务的不断推进,技术架构不断演进而得到发展和实现的。而所谓的分布式系统,实际上就是想办法引入更多的硬件资源&am…

python 异步Web框架sanic

我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tornado简单,可惜flask不支持异步,而sanic就是类似Flask语法的异步框架。 github&#xff1…

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:外层作用域和全局变量]

分类目录:《系统学习Python》总目录 闭包函数(带有外围def作用域引用和嵌套的def)常常可以实现相同的效果,特别是用于像被装饰的最初咱数这样的静态数据时。然而在下面这个例子中,我们也需要外层作用域中的一个计数器&…

{MySQL} 数据库约束 表的关系 新增删除 修改 查询

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数据库约束1.1约束类型:1.2 NULL约束1.3unique 唯一约束1.4 DEFAULT:默认值约束1.5 PRIMARY KEY:主键约束1.6 FOREIGN K…

Kaggle:数据科学竞赛的殿堂与个人成长的舞台

一、产品简介: 它是一个举办数据科学竞赛、托管数据库、编写和分享代码的在线平台。这个数据集就像一个超级大的信息库,包含了我们日常生活中的各种事情,比如电子游戏的销量啊,还有空气质量如何受到污染等等。这些信息都是现实中…

车载毫米波雷达及芯片新趋势研究1--毫米波雷达与其它车载传感器互补,研发及量产门槛较高

1.1 毫米波雷达是利用毫米波电磁波波束工作的雷达,车载是首要应用场景  毫米波雷达是一种以波长位于1-10mm、频率在30-300GHz的电磁波作为放射波的雷达传感器。  毫米波雷达利用毫米波波束进行工作。①检测障碍物时: 直接通过有无回波确认&#xff…

06-C++ 类和对象-多态

类与对象 多态 1. 简介 一个事物的多种形态,简称多态。 物的多态 同一个人在不同人面前,角色不同 如: 在父母面前在对象面前在朋友面前在同事面前 事的多态 同一种事情,在不同情况下展现不同 如: 吃饭 中国人 筷子 …

8天狂收6100颗星,可商用!东京工业、麻省理工等开源Stream Diffusion

加州大学伯克利分校、东洋大学、东京工业大学、麻省理工学院和筑波大学等研究人员,联合开源了一款创新性实时交互图像生成框架——Stream Diffusion。 Stream Diffusion的技术创新点在于,将传统的顺序去噪变成流批处理去噪,消除了漫长的等待…

vue项目hdr格式文件放在assets下rgbeloader.load获取不到问题解决

如下图 我再App.vue组件中这样写 艾特符号定位 告诉系统 要src下的assets下的xhdr下的xidis.hdr 但是运行项目 他会告诉你找不到这个资源 我们改一下 我们组件时 App.vue 与assets同在 src目录下 用 ./去找 这样也是找不到的 我们需要将它放在静态资源包public下 public路…

CDSP考取的价值:成为数据安全认证专家的好处

哈喽IT的朋友们👋,今天想和大家聊聊一个超级有用的专业认证:CDSP,也就是数据安全认证专家。如果你在数据安全领域或者对这方面感兴趣,这个认证绝对值得你去考取哦! 1.🎓提升专业性:获…

MCEWMDRMNDBootstrap.dll文件丢失,软件游戏无法启动,怎样下载修复

不少小伙伴反馈,在打开某些游戏或软件的时候,Windows会提示“MCEWMDRMNDBootstrap.dll文件丢失,软件无法启动”,不知道应该怎样办? 首先,我们先来了解“MCEWMDRMNDBootstrap.dll文件”是什么? …

单片机开发从小工到专家

有道无术,术尚可求;有术无道,止于术 背景 向单片机嵌入式开发小伙伴推荐了几本书,阅读量破10 1. 适用范围 2. 书籍推荐 书籍推荐 3. 大师介绍 大师介绍 4. 大师书籍编写逻辑 25年大师出版的关于:嵌入式单片…