【学习总结|DAY026】MySQL基础

在 Web 后端开发中,数据库扮演着至关重要的角色,它是存储和管理数据的核心组件。近期学习了数据库相关知识,在此分享学习过程中的重点内容,涵盖数据库基础概念、MySQL 操作以及 SQL 语句的详细使用等方面。

一、数据库基础概念

  • 数据库(DataBase - DB):形象地说,它就像是一个大型的数据仓库,专门用于高效地存储和管理海量数据。例如,在金融领域,同花顺的数据中心需要存储海量的股票、基金等金融数据,包括股票代码、价格、涨跌幅、资金流向等信息,这些数据都存放在数据库中,以便随时查询和分析。
  • 数据库管理系统(DataBase Management System - DBMS):是操作和管理数据库的强大软件工具。常见的有 Oracle、SQL Server、PostgreSQL、DB2、SQLite、MariaDB 和 MySQL 等。以 MySQL 为例,它在众多中小型企业的 Web 应用开发中被广泛使用,能够稳定地处理大量的用户数据和业务数据。
  • SQL(Structured Query Language):作为操作关系型数据库的标准编程语言,它为开发者提供了统一的操作规范。无论是哪种关系型数据库,都可以使用 SQL 进行数据的增删改查等操作,大大提高了开发效率和数据处理的便捷性。

二、MySQL 概述

  • 版本选择:MySQL 提供商业版(MySQL Enterprise Edition)和社区版(MySQL Community Server)。商业版收费但提供 30 天试用和官方技术支持,社区版免费但无官方技术支持。本课程采用 MySQL Community Server 8.0.34 版本,其下载地址为 MySQL :: Download MySQL Community Server 。
  • 安装与连接:安装完成后,通过命令行连接 MySQL,语法为 mysql -u用户名 -p密码 [-h数据库服务器 IP 地址 -P端口号]。例如,在本地连接 MySQL 服务器,假设用户名是 root,密码是 1234,端口号为 3306,则在命令行输入 mysql -uroot -p1234 -h127.0.0.1 -P3306 即可成功连接。
  • 数据模型:MySQL 是关系型数据库(RDBMS),由多张相互关联的二维表构成。比如在企业管理系统中,会有员工表和部门表。员工表包含员工编号、姓名、工作岗位、所属部门编号等字段,部门表包含部门编号、部门名称等字段,通过部门编号这一外键将两张表关联起来,实现数据的有效组织和管理。

三、SQL 语句分类与示例

(一)DDL(Data Definition Language)

  • 数据库操作
    • 查询所有数据库:SHOW DATABASES;
    • 查询当前数据库:SELECT DATABASE();
    • 使用 / 切换数据库:USE 数据库名;
    • 创建数据库:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET utf8mb4]; 例如创建一个名为 test_db 的数据库,可使用 CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARSET utf8mb4;
    • 删除数据库:DROP DATABASE [IF EXISTS] 数据库名;
  • 表结构操作
    • 创建表:CREATE TABLE tablename(字段 1 字段类型 [约束] [COMMENT 字段 1 注释],... 字段 2 字段类型 [约束] [COMMENT 字段 2 注释]) [COMMENT 表注释]; 例如创建员工表:
CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工编号',
    name VARCHAR(20) NOT NULL COMMENT '员工姓名',
    age INT COMMENT '员工年龄',
    gender ENUM('男', '女') DEFAULT '男' COMMENT '员工性别',
    department_id INT COMMENT '所属部门编号',
    hire_date DATE COMMENT '入职日期',
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT '员工信息表';
  • 查询表结构:DESC 表名; 如查询 employees 表结构,使用 DESC employees;
  • 查询建表语句:SHOW CREATE TABLE 表名;
  • 添加字段:ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]; 例如为 employees 表添加一个新字段 phone_number VARCHAR(11) COMMENT '手机号码';,使用 ALTER TABLE employees ADD phone_number VARCHAR(11) COMMENT '手机号码';
  • 修改字段类型:ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); 若要将 employees 表中 age 字段的数据类型修改为 SMALLINT,可使用 ALTER TABLE employees MODIFY age SMALLINT;
  • 修改字段名与字段类型:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; 如将 employees 表中的 phone_number 字段重命名为 mobile_phone 并修改类型为 CHAR(11),使用 ALTER TABLE employees CHANGE phone_number mobile_phone CHAR(11) COMMENT '手机号码';
  • 删除字段:ALTER TABLE 表名 DROP COLUMN 字段名; 要删除 employees 表中的 mobile_phone 字段,使用 ALTER TABLE employees DROP COLUMN mobile_phone;
  • 修改表名:ALTER TABLE 表名 RENAME TO 新表名; 若将 employees 表重命名为 staff_info,使用 ALTER TABLE employees RENAME TO staff_info;
  • 删除表:DROP TABLE [IF EXISTS] 表名;

(二)DML(Data Manipulation Language)

  • 插入数据(INSERT)
    • 指定字段添加数据:INSERT INTO 表名(字段名 1, 字段名 2) VALUES (值 1, 值 2); 例如向 employees 表中插入一条员工数据,只插入 name 和 age 字段的值,使用 INSERT INTO employees(name, age) VALUES ('张三', 25);
    • 全部字段添加数据:INSERT INTO 表名 VALUES (值 1, 值 2,...); 如插入一条完整的员工数据 INSERT INTO employees VALUES (1, '李四', 30, '男', 1, '2023-01-01', '2023-01-01 00:00:00', '2023-01-01 00:00:00');
    • 批量添加数据(指定字段):INSERT INTO 表名 (字段名 1, 字段名 2) VALUES (值 1, 值 2), (值 1, 值 2); 例如批量插入两条员工数据的部分字段 INSERT INTO employees(name, age) VALUES ('王五', 28), ('赵六', 32);
    • 批量添加数据(全部字段):INSERT INTO 表名 VALUES (值 1, 值 2,...), (值 1, 值 2,...);
  • 修改数据(UPDATE)UPDATE 表名 SET 字段名 1 = 值 1, 字段名 2 = 值 2,... [WHERE 条件]; 比如将 employees 表中所有年龄大于 30 岁的员工的部门编号修改为 2,使用 UPDATE employees SET department_id = 2 WHERE age > 30;
  • 删除数据(DELETE)DELETE FROM 表名 [WHERE 条件]; 若要删除 employees 表中所有入职日期早于 2020-01-01 的员工数据,使用 DELETE FROM employees WHERE hire_date < '2020-01-01';

(三)DQL(Data Query Language)

  • 基本查询
    • 查询多个字段:SELECT 字段 1,字段 2,字段 3 FROM 表名; 如查询 employees 表中的员工姓名和年龄,使用 SELECT name, age FROM employees;
    • 查询所有字段(通配符):SELECT * FROM 表名; 例如 SELECT * FROM employees;
    • 为查询字段设置别名:SELECT 字段 1 [AS 别名 1], 字段 2 [AS 别名 2] FROM 表名; 如查询员工姓名并设置别名为 employee_name,使用 SELECT name AS employee_name FROM employees;
    • 去除重复记录:SELECT DISTINCT 字段列表 FROM 表名; 若要查询 employees 表中不同的部门编号,使用 SELECT DISTINCT department_id FROM employees;
  • 条件查询SELECT 字段列表 FROM 表名 WHERE 条件列表 ; 例如查询 employees 表中年龄在 25 到 35 岁之间的员工信息,使用 SELECT * FROM employees WHERE age BETWEEN 25 AND 35; 还可以使用比较运算符(>>=<<==<> 或 !=)、逻辑运算符(ANDORNOT)以及模糊匹配(LIKE 搭配 % 和 _ 通配符)等进行复杂条件查询。
  • 分组查询SELECT 字段列表 FROM 表名 [WHERE 条件列表] GROUP BY 分组字段名 [HAVING 分组后过滤条件]; 例如统计每个部门的员工数量,使用 SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; 注意 WHERE 用于分组前过滤,HAVING 用于分组后对结果过滤,且 HAVING 可以对聚合函数进行判断,而 WHERE 不能。
  • 排序查询SELECT 字段列表 FROM 表名 [WHERE 条件列表] [GROUP BY 分组字段名 HAVING 分组后过滤条件] ORDER BY 排序字段 排序方式; 如查询员工信息并按照年龄升序排序,使用 SELECT * FROM employees ORDER BY age; 若要按照年龄降序和入职日期升序排序,使用 SELECT * FROM employees ORDER BY age DESC, hire_date ASC;
  • 分页查询SELECT 字段 FROM 表名 [WHERE 条件] [GROUP BY 分组字段 HAVING 过滤条件] [ORDER BY 排序字段] LIMIT 起始索引,查询记录数; 假设每页显示 10 条数据,查询第 2 页的员工数据,起始索引为 (2 - 1) * 10 = 10,使用 SELECT * FROM employees LIMIT 10, 10;

四、总结

通过本次学习,对数据库的基本概念、MySQL 的安装与使用以及 SQL 语句的各种操作有了较为深入的理解。在实际应用中,需要根据具体的业务需求合理设计数据库表结构,并熟练运用 SQL 语句进行数据的管理和查询,以确保数据的完整性、准确性和高效性。后续还需不断练习和实践,进一步提升在数据库领域的技能水平,为 Web 后端开发项目提供坚实的数据支持。

你可能感兴趣的:(学习,mysql,数据库)