数据库每日习题解释版

发布时间 2023-07-26 10:45:27作者: Chimengmeng

数据库每日习题解释版

day40

1.库、表、记录的概念

  • 数据库(Database):
    • 数据库是一个集合,其中包含相关数据的组织和存储。
    • 它是逻辑上相互关联的数据项的集合。
    • 数据库可以包含多个表,通过使用数据库,可以更好地组织和管理数据。
  • 表(Table):
    • 表是数据库中的一个基本组成单位,它由行和列组成。
    • 表由一组具有相同结构的数据记录组成。
    • 每个表都有一个名称,用于唯一标识它。
    • 表的列定义了表中包含的不同字段或属性的名称和数据类型。
  • 记录(Record):
    • 记录是表中的一个实例或一条数据项。
    • 每条记录代表了表中的一个特定数据集。
    • 记录由表的列组成,每个列对应着一个特定的字段值。
    • 例如,在一个学生表中,每个记录可能包含姓名、年龄、性别等字段的值。

2.写出针对库的SQL语句

针对库(Database)的SQL语句主要用于创建、切换、删除和查看数据库。以下是一些针对库的常用SQL语句:

  1. 创建数据库:
CREATE DATABASE database_name;

其中,database_name为要创建的数据库名称。

  1. 切换到特定数据库:
USE database_name;

其中,database_name为要切换到的数据库名称。

  1. 查看所有数据库:
SHOW DATABASES;
  1. 查看特定数据库的信息:
SHOW CREATE DATABASE database_name;

其中,database_name为要查看的数据库名称。

  1. 删除数据库:
DROP DATABASE database_name;

其中,database_name为要删除的数据库名称。

请确保在执行修改性的SQL语句之前,先备份数据库以避免数据丢失。

3.写出制作系统服务的流程及相关命令

在Windows系统上,可以通过以下步骤制作MySQL系统服务:

  1. 下载MySQL安装包:从MySQL官方网站下载适用于Windows的MySQL安装包。

  2. 安装MySQL:运行下载的安装包,按照提示进行MySQL的安装。在安装过程中,可以选择自定义安装路径和其他选项。

  3. 配置MySQL:在安装完成后,需要对MySQL进行配置。主要包括设置root用户密码、配置数据库存储路径等。可以使用MySQL提供的命令行工具或图形界面工具(如MySQL Workbench)进行配置。

  4. 创建MySQL系统服务:使用命令行工具(以管理员身份运行)执行以下命令来创建MySQL系统服务:

sc create MySQL binPath= "<MySQL安装目录>\bin\mysqld --defaults-file=<MySQL配置文件路径>" DisplayName= "MySQL" start= "auto"

请将上述命令中的<MySQL安装目录>替换为实际的MySQL安装目录路径,<MySQL配置文件路径>替换为实际的MySQL配置文件路径。

  1. 启动MySQL服务:执行以下命令来启动MySQL服务:
net start MySQL

现在,你已成功创建并启动了MySQL系统服务。你可以使用MySQL客户端工具连接到MySQL服务器,开始进行数据库管理和查询操作。

请注意,以上步骤仅适用于MySQL 5.6及更高版本。在不同版本的MySQL中,步骤可能会有所不同。确保参考相应的MySQL文档以适应您使用的特定版本。

4.写出针对表的基本sql语句

以下是针对表的基本SQL语句:

  1. 创建表:

    CREATE TABLE table_name (
      column1 datatype constraint,
      column2 datatype constraint,
      ...
    );
    
  2. 插入数据:

    INSERT INTO table_name (column1, column2, ...)
    VALUES (value1, value2, ...);
    
  3. 查询数据:

    SELECT column1, column2, ...
    FROM table_name
    WHERE condition;
    
  4. 更新数据:

    UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
    
  5. 删除数据:

    DELETE FROM table_name
    WHERE condition;
    
  6. 修改表结构:

    • 增加列:

      ALTER TABLE table_name
      ADD column_name datatype constraint;
      
    • 修改列:

      ALTER TABLE table_name
      MODIFY COLUMN column_name datatype constraint;
      
    • 删除列:

      ALTER TABLE table_name
      DROP COLUMN column_name;
      
  7. 创建索引:

    CREATE INDEX index_name
    ON table_name (column1, column2, ...);
    
  8. 删除索引:

    DROP INDEX index_name
    ON table_name;
    

5.聊聊MySQL的存储引擎,有哪几个,什么特征

  • Innodb
    • 是MySQL5.5版本之后的默认存储引擎
    • 支持事务/行锁/外键
  • myisam
    • 是MySQL5.5版本之前的默认存储引擎
    • 速度比innodb快,但是数据安全较弱
  • memory
    • 内存引擎
    • 数据全部存放在内存中
    • 存储速度快,但是断电数据丢失
  • blackhole
    • 黑洞引擎
    • 无论存什么都会立刻消失

6.你知道的MySQL中数据类型有哪些,分别写写

  1. 整数类型:

    • TINYINT:1字节,范围为-128到127(有符号)或0到255(无符号)
    • SMALLINT:2字节,范围为-32768到32767(有符号)或0到65535(无符号)
    • INT:4字节,范围为-2147483648到2147483647(有符号)或0到4294967295(无符号)
    • BIGINT:8字节,范围为-9223372036854775808到9223372036854775807(有符号)或0到18446744073709551615(无符号)
  2. 浮点数类型:

    • FLOAT:4字节,范围为-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38
    • DOUBLE:8字节,范围为-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308
    • DECIMAL:对于存储精确的小数值,存储为字符串。需要指定精度和刻度。
  3. 字符串类型:

    • CHAR(n):固定长度字符串,最大长度为255个字符。
    • VARCHAR(n):可变长度字符串,最大长度为65535个字符。
    • TEXT:可变长度字符串,最大长度为65535个字符。
  4. 日期和时间类型:

    • DATE:日期值,格式为'YYYY-MM-DD'。
    • TIME:时间值,格式为'HH:MM:SS'。
    • DATETIME:日期和时间值,格式为'YYYY-MM-DD HH:MM:SS'。
    • TIMESTAMP:时间戳,存储从1970年1月1日起的秒数。
  5. 其他常见类型:

    • BOOLEAN:存储布尔值,可以是TRUE或FALSE。
    • BINARY:二进制数据,最大长度为255字节。
    • ENUM:枚举类型,可以选择指定的值列表中的一个。

7.MySQL中有哪些约束条件,其中,主键有什么特点,怎么使用

主键(Primary Key)约束:

主键是一种用于唯一标识表中每行数据的字段或字段组合。主键具有以下特点:

  • 唯一性:主键值在整个表中必须是唯一的,不能重复。
  • 非空性:主键字段的值不能为空,即主键字段不能为NULL值。
  • 一般为整数类型或字符串类型。

要使用主键约束,可以在创建表时指定主键,也可以在已存在的表上添加主键约束。以下是两种方法:

方法一:在创建表时指定主键约束

CREATE TABLE 表名 (
    列名 数据类型 PRIMARY KEY,
    ...
);

方法二:在已存在的表上添加主键约束

ALTER TABLE 表名
ADD PRIMARY KEY (列名);

在使用主键时,需要注意以下几点:

  • 表中只能有一个主键,不能多于一个。
  • 主键字段不允许NULL值,因此在插入和更新数据时,必须为主键字段提供非NULL值。
  • 主键可以由单个字段组成,也可以由多个字段组成,形成复合主键。

复合主键的创建示例:

CREATE TABLE 表名 (
    列名1 数据类型,
    列名2 数据类型,
    ...
    PRIMARY KEY (列名1,列名2)
);

8.查询关键字有哪些,分别写一写

  1. SELECT:用于从数据库中查询数据。SELECT语句可以指定要查询的表、列以及一些限制条件。

示例:

SELECT 列名1, 列名2 FROM 表名;

这个例子查询了表中的两列数据。

  1. WHERE:用于对查询结果进行过滤,只返回满足指定条件的行。

示例:

SELECT 列名1, 列名2 FROM 表名 WHERE 条件;

这个例子只返回满足条件的行。

  1. DISTINCT:用于去除查询结果中重复的行,只返回唯一的行。

示例:

SELECT DISTINCT 列名 FROM 表名;

这个例子返回指定列中的唯一值。

  1. ORDER BY:用于对查询结果进行排序。

示例:

SELECT 列名1, 列名2 FROM 表名 ORDER BY 列名 ASC/DESC;

这个例子按照指定列进行升序(ASC)或降序(DESC)排序。

  1. GROUP BY:用于对查询结果进行分组,通常与聚合函数(如COUNT、SUM等)一起使用。

示例:

SELECT 列名1, 聚合函数(列名2) FROM 表名 GROUP BY 列名1;

这个例子按照指定的列进行分组,并在每个分组上使用聚合函数。

  1. HAVING:用于在GROUP BY语句中对分组后的结果进行过滤。

示例:

SELECT 列名1, 聚合函数(列名2) FROM 表名 GROUP BY 列名1 HAVING 条件;

这个例子在分组结果上过滤满足条件的行。

  1. LIMIT:用于限制查询结果返回的行数。

示例:

SELECT * FROM 表名 LIMIT 行数;

这个例子只返回指定行数的数据。

9.MySQL的表关系有那些,创建外键字段如何选择表

MySQL中的表关系主要有三种:一对一关系(One-to-One)、一对多关系(One-to-Many)和多对多关系(Many-to-Many)。

一对一关系(One-to-One):

在一对一关系中,一个实体记录(表A)只能对应另一个实体记录(表B)的一条数据,反之亦然。一对一关系通常通过在一方表中添加外键字段来实现。

一对多关系(One-to-Many):

在一对多关系中,一个实体记录(表A)可以对应多个另一个实体记录(表B)的数据,而另一个实体记录(表B)只能对应一个实体记录(表A)的数据。一对多关系通常通过在多方表中添加外键字段来实现。

多对多关系(Many-to-Many):

在多对多关系中,一个实体记录(表A)可以对应多个另一个实体记录(表B)的数据,同时一个实体记录(表B)也可以对应多个实体记录(表A)的数据。多对多关系通常需要通过引入第三张关联表来实现,该关联表包含两个外键字段分别与表A和表B相关联。

创建外键字段时,选择关联的表需要考虑数据业务逻辑和关系的一致性约束。以下是一些建议:

  1. 一对一关系:
    创建外键字段时,将其添加到与当前表相关联的另一个表中。选择外键字段应该基于关系的本质以及数据的一致性要求。

  2. 一对多关系:
    创建外键字段时,将其添加到“多”方表中,即有多个实体记录的那一方。外键字段将指向“一”的那一方的主键。这种设置可以确保数据的强一致性和参照完整性。

  3. 多对多关系:
    多对多关系通常需要创建一个额外的关联表,来存储两个实体记录之间的关联信息。在关联表中,分别添加两个外键字段,分别与两个相关联的表的主键建立关系。

10.写出创建多对多,一对多表关系的sql语句

创建多对多关系的表结构,需要三个表:表A、表B和关联表AB。

-- 创建表A
CREATE TABLE tableA (
    id INT PRIMARY KEY AUTO_INCREMENT,
    -- 其他字段...
);

-- 创建表B
CREATE TABLE tableB (
    id INT PRIMARY KEY AUTO_INCREMENT,
    -- 其他字段...
);

-- 创建关联表AB
CREATE TABLE tableAB (
    id INT PRIMARY KEY AUTO_INCREMENT,
    tableA_id INT,
    tableB_id INT,
    -- 其他字段...
    FOREIGN KEY (tableA_id) REFERENCES tableA(id),
    FOREIGN KEY (tableB_id) REFERENCES tableB(id)
);

这里的关联表AB包含两个外键字段,分别与表A和表B的主键相关联。通过这种方式可以建立多对多的关系。

创建一对多关系时,只需要在“多”的一方表中添加外键字段指向“一”的那一方表的主键。

-- 创建一对多关系的表结构

-- 创建表A
CREATE TABLE tableA (
    id INT PRIMARY KEY AUTO_INCREMENT,
    -- 其他字段...
);

-- 创建表B,并添加指向表A的外键字段
CREATE TABLE tableB (
    id INT PRIMARY KEY AUTO_INCREMENT,
    tableA_id INT,
    -- 其他字段...
    FOREIGN KEY (tableA_id) REFERENCES tableA(id)
);

这样,表B中的tableA_id字段就作为外键,指向表A中的主键,实现了一对多的关系。

请根据实际需求,在上述SQL语句中进行相应的表名和字段名修改。

11.多表查询有哪几种思考,其中,连表查询的关键字有哪些,分别什么特点

在多表查询时,可以采用以下几种思考方式:

内连接(INNER JOIN):

内连接返回两个表之间匹配的行,关键字为INNER JOIN。

特点:

  • 只返回两个表之间共有的数据行。
  • 默认情况下,INNER JOIN根据两个表中的相同列进行比较,返回满足条件的行。

外连接(OUTER JOIN):

外连接返回两个表之间符合条件的所有行,关键字包括左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)。

特点:

  • 左外连接返回左表中的所有行和右表中匹配的行。
  • 右外连接返回右表中的所有行和左表中匹配的行。
  • 全外连接返回两个表中的所有行。

自连接(SELF JOIN):

自连接是指将表与自身进行连接,关键字为INNER JOIN或LEFT JOIN或RIGHT JOIN。

特点:

  • 自连接常用于解决需要用到同一个表中的不同行的查询需求,例如查询员工的上级或下级员工。
  • 在自连接中,需要使用不同的别名来区分同一个表的不同实例。

其他

除了以上提到的关键字外,还有一些其他的关键字用于连表查询,如:

  • CROSS JOIN: 返回两个表的笛卡尔积,即所有可能的组合。
  • NATURAL JOIN: 根据两个表之间的列名进行隐式连接。
  • USING: 指定具有相同名称的列进行连接。

需要根据具体场景和查询需求选择适合的关键字进行连表查询。

12.mysql中的事务是什么,四大特性分别是,如何使用事务

四大特性

  • 在MySQL数据库中,事务是一组数据库操作(例如插入、更新、删除)的逻辑单元,这些操作要么全部成功执行,要么全部失败回滚。
  • 事务的四大特性是ACID,分别代表着原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
  1. 原子性(Atomicity):事务是一个不可分割的操作单位,要么全部执行成功,要么全部回滚到初始状态。如果其中任何一条操作失败,则整个事务都会回滚到最初状态,保证数据的完整性。

  2. 一致性(Consistency):事务在执行之前和之后,数据库都必须满足一致性约束。一致性指的是事务使数据库从一个一致性状态转变为另一个一致性状态。例如,转账操作中,无论是增加一个账户的余额还是减少另一个账户的余额,总的来说,总金额应该保持不变。

  3. 隔离性(Isolation):多个事务并发执行时,每个事务都应该与其他事务相互隔离,互不干扰。隔离级别可以配置来控制事务间相互影响的程度,常见的隔离级别有读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

  4. 持久性(Durability):一旦事务提交成功,对数据库的修改就是永久性的,即使系统发生故障也不会丢失。数据库会将已提交事务的结果永久保存在磁盘中,以保证数据的持久性。

如何使用事务:

在MySQL中,使用事务可以通过以下步骤来实现:

  1. 开启事务:使用START TRANSACTION或者BEGIN语句来开始一个事务。

  2. 执行事务操作:在事务中执行数据库操作语句,例如插入、更新、删除等。

  3. 判断事务状态:根据操作的结果判断事务状态,如果所有操作都成功,继续执行下一步;如果有任何错误,回滚事务。

  4. 提交事务:使用COMMIT语句来提交事务,将事务中的操作结果永久保存到数据库。

  5. 回滚事务:如果在事务操作过程中发生任何错误,可以使用ROLLBACK语句回滚事务,撤销之前的操作,恢复到事务开始之前的状态。

注意:

  • 自动提交是默认开启的,即每个SQL语句都会自动作为一个事务执行并提交
  • 如果不希望自动提交,可以使用SET AUTOCOMMIT=0关闭自动提交,再手动执行事务操作和提交/回滚事务。

13.简单聊聊索引,索引主要解决什么问题,有哪些种类,组合索引如何使用有什么特征

  • 索引在数据库中起到加速数据检索的作用。
  • 它是对一个或多个列(字段)进行排序和存储的数据结构,可以快速定位到满足特定条件的数据行,从而提高查询性能。

索引主要解决以下两个问题:

  1. 数据的快速定位:通过索引可以减少数据库中需要扫描的数据量,加速查询操作。索引会存储列值和指向对应数据行的指针,这样查询时就可以直接定位到相关数据行,而不需要全表扫描。

  2. 数据的唯一性约束:索引可以将某一列(字段)定义为唯一索引,保证该列的值的唯一性,避免重复数据的插入。

常见的索引类型包括:

  1. B-Tree索引:是最常见的索引类型,适用于等值查询、范围查询和排序操作。

  2. 哈希索引:使用哈希函数将索引值转换为哈希码,通过计算哈希码定位数据行。适用于等值查询,但不适用于范围查询和排序操作。

  3. 全文索引:用于全文搜索,例如在文本数据中查找包含指定关键字的记录。

  4. 空间索引:用于支持地理位置数据的空间查询,在GIS系统中常用。

  • 除了单列索引,还可以创建组合索引(也称为复合索引或多列索引),即将多个列组合在一起创建索引。
  • 组合索引可以提高多列条件查询的效率,减少索引的存储空间。

组合索引的使用要注意以下特征:

  1. 顺序:组合索引按照字段的顺序进行排序,查询时需要按照索引的字段顺序进行匹配,才能发挥最佳性能。

  2. 最左前缀原则:组合索引可以只使用索引中的最左侧连续字段进行匹配查询,如果不遵守最左前缀原则,无法有效使用索引加速查询。

  3. 覆盖索引:如果查询结果可以从组合索引中的字段获取,而不需要回表查询实际数据行,就可以使用覆盖索引,以减少IO操作,提高性能。

  • 需要注意的是,在创建索引时需要权衡索引的选择和建立规则,过多或过大的索引可能会占用更多的存储空间,并带来额外的维护成本。
  • 此外,在频繁更新表或插入/删除数据时,索引会增加额外的开销。
  • 因此,对于不同的业务场景和查询需求,需要根据实际情况来选择合适的索引策略。