数据库 基础面试第一弹

这篇具有很好参考价值的文章主要介绍了数据库 基础面试第一弹。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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(数据操作语言)示例:

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(数据查询语言)示例:

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(数据控制语言)示例:

GRANT SELECT, INSERT ON employees TO user1;  #授予用户访问权限

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

DENY SELECT, INSERT 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):

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

 

 

  文章来源地址https://www.toymoban.com/news/detail-694477.html

  

到了这里,关于数据库 基础面试第一弹的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库基础知识之数据类型

    mysql常用数据类型 一、数值类型(整型、浮点型) 1、整型 eg:添加一个表格:点击表——添加字段——名称——类型,年龄age是tinyint类型,要在下方勾选无符号,因为年龄都是正数,不存在负数一说,所以不需要符号。 点击保存,然后输入表名,比如t1,就出现了t1    然后

    2024年02月06日
    浏览(51)
  • 操作系统 面试第一弹

    进程(Process)和线程(Thread)是操作系统中的重要概念,它们表示执行中的程序的不同执行单元。下面是它们的区别: 定义:进程是一个独立的执行环境,具有独立的内存空间,包含程序代码、数据和执行状态。线程是进程内的一个执行单元,共享相同的内存空间和系统资

    2024年02月09日
    浏览(39)
  • python 面试题第一弹

    浅拷贝(Shallow Copy)创建一个新的对象,该对象的内容是原始对象的引用。这意味着 新对象与原始对象共享相同的内存地址 ,因此对于可变对象来说,如果修改了其中一个对象,另一个对象也会受到影响。浅拷贝通常使用 copy 模块的 copy() 函数或者对象的 copy() 方法来完成。

    2024年02月12日
    浏览(34)
  • 【软考数据库】第一章 计算机系统基础知识

    目录 目录 1.1 计算机系统 1.1.1 计算机硬件组成 1.1.2 中央处理单元 1.1.3 数据表示 1.1.4 校验码 1.2 计算机体系结构 1.2.1 体系结构分类 1.2.2 指令系统存 1.2.3 储系系统 1.2.4 输入/输出技术 1.2.5 总线结构 1.3 可靠性、性能、安全 1.3.1 计算机可靠性 1.3.2 计算机系统的性能评价 1.

    2023年04月13日
    浏览(110)
  • 数据库基础(面试常见题)

    一、 数据库 基础 1. 数据抽象 :物理抽象、概念抽象、视图级抽象,内模式、模式、外模式 2. SQL语言 包括数据定义、数据操纵(Data Manipulation),数据控制(Data Control) 数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等 数据操纵:Select ,insert,update,delete, 数据控制:grant,revoke 3

    2024年02月09日
    浏览(79)
  • 数据库基础面试第四弹

    1. 字符串(String): 字符串是Redis最基本的数据结构。它可以存储任意类型的数据,包括文本、整数或二进制数据。字符串类型的值最大可以达到512MB。 2. 列表(List): 列表是一个有序的字符串集合。它允许在列表的两端进行元素的插入和删除操作,支持按照索引获取元素

    2024年02月09日
    浏览(33)
  • 数据库基础面试第二弹

    乐观锁和悲观锁是在并发编程中使用的两种并发控制机制,用于解决多线程或多进程环境下的数据一致性问题。 1. 悲观锁 (Pessimistic Locking): 悲观锁的思想是假设并发访问会导致冲突,因此在访问共享资源之前,悲观锁会将资源锁定,确保其他线程无法修改资源。悲观锁的

    2024年02月10日
    浏览(34)
  • 数据库基础面试第三弹

    1. MyISAM: MyISAM是MySQL最早的数据库引擎之一。它被设计成处理大量的插入和查询操作。MyISAM表格的数据存储在三个文件上:.frm文件存储表结构,.MYD文件存储数据,.MYI文件存储索引。 MyISAM表格不支持事务处理和崩溃恢复 ,因此在并发写入操作和故障发生时可能会导致数据不

    2024年02月09日
    浏览(42)
  • 互联网Java工程师面试题·Java 面试篇·第一弹

    目录 1、Java 中能创建 volatile 数组吗? 2、volatile 能使得一个非原子操作变成原子操作吗? 3、volatile 修饰符的有过什么实践? 4、volatile 类型变量提供什么保证? 5、10 个线程和 2 个线程的同步代码,哪个更容易写? 6、你是如何调用 wait()方法的?使用 if 块还是循环?为什

    2024年02月07日
    浏览(39)
  • 数据库安全-第一章 Mysql 安全基础-【web 环境搭建——LAMP-1】-LAMP & LNMP 简介

    WEB 的本意是蜘蛛网和网,在网页设计中称为网页。现广泛译作网络、互联网等技术领域。日常生活中用户使用浏览器请求一个 URL ,这个 URL 标识着某个特定的服务器的特定资源,服务器接收到请求之后,服务器就把生成的 HTML 网页通过 HTTP 协议发送给浏览器。 早期的 WEB 页

    2024年01月18日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包