数据库基础知识

  1. 什么数据库
    数据库是按照一定数据模型组织存储管理保护数据集合。它可以一个文件系统,也可以一个支持数据访问软件系统

  2. 什么关系数据库
    关系型数据库是以关系模型(表)为基础的数据管理系统。它通过行和列方式组织数据采用结构化查询语言(SQL)进行数据的操作管理

  3. 什么是非关系型数据库
    非关系型数据库是指不使用表和关系模型数据库。它以键值对、文档列族等形式来组织和管理数据。非关系型数据库适用于大规模、高并发的数据存储访问场景

  4. 数据库的三大范式什么
    第一范式(1NF):列不可再分,每个列都是不可再分的基本数据单元
    第二范式(2NF):不存在部分函数依赖每个主键依赖于全部主键
    第三范式(3NF):不存在传递依赖每个主键直接依赖于主键。

  5. 什么是SQL?
    SQL(Structured Query Language)是结构查询语言用于管理和操作关系型数据库。它包含了数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)等语句

  6. 什么是ACID特性
    ACID(原子性、一致性隔离性、持久性)是数据库事务的四个特性原子表示事务中的操作要么全部执行成功要么全部失败一致性表示事务执行后,数据库从一个一致状态移到一个一致状态隔离表示并发执行的事务之间是相互隔离的;持久性表示事务一旦提交,对数据的改变是永久的。

  7. 什么是事务?
    事务是指由一个多个操作组成的一个工作单位要么全部执行成功,要么全部失败。事务具有原子性、一致性隔离性和持久性四个特性可以通过事务管理来保证数据的完整性和一致性。在关系型数据库中,事务由事务开始(BEGIN)、事务提交(COMMIT)和事务回滚(ROLLBACK)来控制

SQL语法

  1. SQL语句分类哪些
    DDL(数据定义语言):用于定义数据结构例如CREATE、ALTER、DROP等。
    DML(数据操作语言):用于操作数库中的数据,例如INSERT、UPDATE、DELETE等。
    DQL(数据查询语言):用于查询数据库中的数据,例如SELECT。
    DCL(数据控制语言):用于控制数据库的访问权限,例如GRANT、REVOKE等。
  2. 什么是DDL、DML、DQL和DCL ?
    DDL(数据定义语言):用于定义数据结构,例如CREATE TABLE、ALTER TABLE、DROP TABLE等。
    DML(数据操作语言):用于操作数库中的数据,例如INSERT INTO、UPDATE、DELETE FROM等。
    DQL(数据查询语言):用于查询数据库中的数据,例如SELECT、FROM、WHERE等。
    DCL(数据控制语言):用于控制数据库的访问权限,例如GRANT、REVOKE等。
  3. 如何创建数据库和表?
    创建数据库:使用CREATE DATABASE语句,例如:CREATE DATABASE mydatabase;
    创建表:使用CREATE TABLE语句,例如:CREATE TABLE mytable (column1 INT, column2
    VARCHAR(50));
  4. 如何表中插入数据?
    使用INSERT INTO语句,指定插入的表和对应的列和值,例如:INSERT INTO mytable (column1, column2) VALUES (10, ‘value’);
  5. 如何查询表中的数据?
    使用SELECT语句,指定查询的列和表,例如:SELECT column1, column2 FROM mytable;
  6. 如何更新表中的数据?
    使用UPDATE语句,指定要更新的表和要更新的列和值,以及更新条件,例如:UPDATE mytable SET column1 = 20 WHERE column2 = ‘value’;
  7. 如何删除表中的数据?
    使用DELETE FROM语句,指定要删除的表和删除的条件,例如:DELETE FROM mytable WHERE column1 = 10;
  8. 如何修改表的结构
    使用ALTER TABLE语句,可以添加修改和删除表的列,例如:
    添加列:ALTER TABLE mytable ADD COLUMN column3 VARCHAR(50);
    修改列定义:ALTER TABLE mytable MODIFY COLUMN column1 INT NOT NULL;
    删除列:ALTER TABLE mytable DROP COLUMN column2;

表操作:

  1. 什么是主键?
    主键(Primary Key)是一个用来唯一标识表中每条记录字段一组字段。它的值必须是唯一的且不为空

  2. 什么是外键
    外键(Foreign Key)是一个字段一组字段,用于在一个表中创建对另一个表主键的引用。它用于建立表与表之间的关系。

  3. 什么是索引
    索引(Index)是一种数据结构,用于加快对表中数据的查找速度。它类似于书的目录可以根据关键字快速定位到数据的位置

  4. 什么是唯一索引
    唯一索引(Unique Index)是一种索引,用于确保被索引的列或列组中的值是唯一的,即不允许重复的值。

  5. 什么是主键索引?
    主键索引(Primary Key Index)是一种特殊唯一索引,用于对主键字段进行索引。主键索引的作用是确保主键的唯一性,同时也会加速对主键的查询操作。

  6. 如何创建索引?
    创建索引可以使用ALTER TABLE语句,具体示例如下
    创建唯一索引:ALTER TABLE table_name ADD UNIQUE index_name(column1);
    创建主键索引:ALTER TABLE table_name ADD PRIMARY KEY (column1);

  7. 如何删除索引?
    删除索引可以使用ALTER TABLE语句,具体示例如下
    删除唯一索引:ALTER TABLE table_name DROP INDEX index_name;
    删除主键索引:ALTER TABLE table_name DROP PRIMARY KEY;

  8. 如何修改表的字段
    使用ALTER TABLE语句,使用MODIFY COLUMN子句修改表的字段定义
    具体示例如下
    ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;

  9. 如何删除表?
    使用DROP TABLE语句,具体示例如下
    DROP TABLE table_name;

索引优化

  1. 为什么要使用索引?
    使用索引可以提高数据库查询的速度性能。索引允许数据库系统更快地定位和访问表中的数据,减少了数据扫描时间和IO负载
  2. 如何选择合适的索引?
    选择合适的索引需要考虑查询频率和查询条件选择性。通常,根据经常使用的查询条件创建索引是一个好的选择。同时,避免过度索引,只创建最常用的索引,以减少索引维护的开销。
  3. 什么是索引覆盖
    索引覆盖是指查询语句可以完全通过索引的结构获取需要的数据,而不需要回表到数据页中获取其他列的数据。通过索引覆盖可以减少IO操作和提高查询性能
  4. 什么是联合索引?
    联合索引(Composite Index)是指由多个组合在一起创建的索引。联合索引可以优化同时查询多个列的条件,提高查询的效率
  5. 什么是最左前缀原则
    最左前缀原则是指在联合索引中,索引的顺序非常重要。索引可以按照从左到右的顺序逐步缩小检索范围,以提高查询性能。如果查询条件中的列顺序不符合索引的顺序,将无法使用到索引的优势。
  6. 什么是索引失效
    索引失效是指索引无法被查询语句有效利用,导致无法提高查询性能常见的索引失效情况包括使用不符合索引顺序的查询条件、类型转换导致无法使用索引等。
  7. 什么是覆盖索引?
    覆盖索引是指索引包含所有查询所需的列,而不需要回表查询数据页。通过覆盖索引可以减少IO操作,提高查询性能。

性能优化:

  1. 如何优化查询语句的性能?
    选择合适的索引,减少全表扫描的开销。
    避免使用SELECT *,只选择需要的列。
    使用JOIN时,确保连接字段有索引。
    避免使用子查询,尽量使用JOIN操作。
    使用LIMIT限制返回行数
  2. 如何优化表的结构?
    根据业务需求和查询模式设计合适的表结构。
    避免使用过多的字段,只留下必要的列。
    对经常用于查询的字段创建索引。
    合理使用数据类型,尽量避免使用过大的数据类型
    根据实际情况拆分大表,减少单表数据量
  3. 如何优化连接查询的性能?
    确保连接字段有索引。
    调整连接表的顺序,将结果集较小的表放在前面
    避免在连接查询中使用不必要的列。
    尽量避免使用多表连接查询,考虑使用其他方式,如子查询、临时表等。
  4. 什么是查询缓存?如何使用查询缓存
    查询缓存是MySQL的一个功能,用于缓存查询语句的结果集。通过开启查询缓存,MySQL可以在执行查询之前检查查询语句是否已经执行过,并且结果是否缓存中。可以使用以下语句来开启禁用查询缓存
    开启查询缓存:SET GLOBAL query_cache_size = {缓存大小};
    禁用查询缓存:SET GLOBAL query_cache_type = OFF;
  5. 什么是分库分表
    分库分表是指将一个大型数据库拆分多个小型数据库或表,用于分散数据存储和提高查询性能。分库分表可以根据实际业务需要将数据根据某种规则进行划分,如按照用户ID、时间等进行水平拆分
  6. 如何进行分页查询?
    分页查询可以使用LIMIT语句来实现。例如,LIMIT 10 OFFSET 20 表示返回第21到第30行的结果
  7. 如何进行分组排序查询?
    分组查询可以通过GROUP BY子句实现。例如,SELECT department, COUNT(*) FROM employees GROUP BY department;
    排序查询可以使用ORDER BY子句实现。例如,SELECT * FROM employees ORDER BY salary DESC;表示按照薪资降序排序

函数存储过程

什么是MySQL函数
MySQL函数是一段预定义的可重用代码块,接收输入参数返回一个值。它可以在SQL语句中使用,用于实现一些常用数据处理计算操作。
如何定义和调用MySQL函数?

  • 定义MySQL函数可以使用CREATE FUNCTION语句,指定函数名、参数列表和函数体。例如:
CREATE FUNCTION my_function_name(param1 INT, param2 INT) RETURNS INT
BEGIN
    -- 函数逻辑
    DECLARE result INT;
    SET result = param1 + param2;
    RETURN result;
END;
  • 调用MySQL函数可以使用SELECT语句,指定函数名和参数。例如:
SELECT my_function_name(10, 20);

什么是存储过程
存储过程是一段预定义的可重用代码块,可以接收输入参数执行系列的SQL语句。与函数不同的是,存储过程可以不返回结果或返回多个结果
如何创建和调用存储过程

创建存储过程可以使用CREATE PROCEDURE语句,指定存储过程名、参数列表过程体。例如:

CREATE PROCEDURE my_procedure_name(IN param1 INT, OUT result INT)
BEGIN
    -- 过程逻辑
    SET result = param1 * 10;
END;

调用存储过程可以使用CALL语句,指定过程名和参数。

CALL my_procedure_name(5, @output);
SELECT @output;

如何传递参数和返回结果?

  • 传递参数可以在函数或存储过程的定义中使用IN、OUT或INOUT来指定参数的类型。IN表示输入参数,OUT表示输出参数,INOUT表示既是输入又是输出参数。
  • 返回结果可以使用RETURN语句来返回结果值,或者使用OUT或INOUT类型的参数来传递结果。在存储过程中使用OUT和INOUT参数时,需要调用过程时声明相应的变量,并使用SELECT语句来获取结果。

数据库备份恢复

如何备份恢复数据库?

mysqldump -u [用户名] -p [密码] mydatabase > backup.sql

这将数据库备份到名为backup.sql文件中。

mysql -u [用户名] -p [密码] mydatabase < backup.sql

这将执行备份文件中的SQL语句,将数据恢复到指定的数据库中

如何分别进行逻辑备份和物理备份?

数据库安全

  1. 什么是数据库安全?
    数据库安全是指保护数据库免受未经授权的访问、数据泄露、数据损坏等安全威胁的一系列措施。它涉及到对数据库的访问控制身份验证、数据加密、备份和恢复等方面的安全性保护

  2. 如何创建用户设置权限?
    创建用户可以使用CREATE USER语句,指定用户名和密码。例如,创建用户名为myuser的用户,可以使用以下命令

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

设置用户权限可以使用GRANT语句,指定权限和用户。例如,授予用户myuser对数据库mydatabase的全部权限,可以使用以下命令

GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';

完成用户创建和权限设置后,需要使用FLUSH PRIVILEGES语句刷新权限表,使修改生效

3.如何保护数据库的安全性

主从复制

  1. 什么是主从复制
  2. 如何配置主从复制
  3. 主从复制原理是什么?
  4. 如何监控MySQL的性能?

存储引擎

  1. MySQL有哪些常见的存储引擎
  2. InnoDB和MyISAM的区别
  3. 如何选择合适的存储引擎?

    Java八股文面试全套真题【含答案】-MySQL数据库+JDBC篇
    欢迎大家评论交流关注私信获取更多内容

原文地址:https://blog.csdn.net/m0_47946173/article/details/134687537

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44332.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注