【学习总结|DAY026】MySQL基础

news2025/1/5 16:35:06

在 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 后端开发项目提供坚实的数据支持。

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

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

相关文章

jenkins修改端口以及开机自启

修改Jenkins端口 方式一&#xff1a;通过配置文件修改&#xff08;以CentOS为例&#xff09; 找到配置文件&#xff1a;在CentOS系统中&#xff0c;通常可以在/etc/sysconfig/jenkins文件中修改Jenkins的配置。如果没有这个文件&#xff0c;也可以查看/etc/default/jenkins&…

vue-table-<td colspan=“2“>不生效

代码是2:1:4:1:4五分布局,效果却是如下: 因为这里的表格没有指定表格布局算法 /*设置表格布局算法*/ 2 table{ 3 table-layout:fixed; 4 } 这里需要了解table-layout属性值、定义和用法、固定表格布局、自动表格布局。 1定义和用法 tableLayout属性用来显示表格单元格、…

Windows系统提示ffmpeg.dll丢失怎么解决?

一、了解ffmpeg.dll文件 ffmpeg.dll是FFmpeg项目的一个动态链接库文件&#xff0c;FFmpeg是一个开源的多媒体处理框架&#xff0c;能够解码、编码、转码、混流、过滤和播放几乎所有已知格式的音频和视频文件。当Windows系统提示ffmpeg.dll丢失时&#xff0c;通常意味着某个需要…

QT:控件属性及常用控件(1)------核心控件及属性

一个图形化界面上的内容&#xff0c;不需要我们直接从零去实现 QT中已经提供了很多的内置控件&#xff1a; 按钮&#xff0c;文本框&#xff0c;单选按钮&#xff0c;复选按钮&#xff0c;下拉框等等。。。。。 文章目录 1.常用控件属性1.1 enabled1.2 geometry1.2.1 geometry…

使用Diffusion Models进行图像超分辩重建

Diffusion Models专栏文章汇总:入门与实战 前言:图像超分辨率重建是一个经典CV任务,其实LR(低分辨率)和 HR(高分辨率)图像仅在高频细节上存在差异。通过添加适当的噪声,LR 图像将变得与其 HR 对应图像无法区分。这篇博客介绍一种方式巧妙利用这个规律使用Diffusion Mod…

药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片

药片(药丸)和胶囊识别数据集&#xff0c;使用yolo&#xff0c;pasical voc xml, coco json格式标注&#xff0c;可识别药片和胶囊两种标签&#xff0c;2445张原始图片 数据集分割 训练组80&#xff05; 1967图片 有效集13% 317图片 测试集7% 161图片 预处…

【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)

&#x1f4a1;总结一下就是&#xff1a; 日常防护的话&#xff0c;医用口罩就可以啦。要是想长时间佩戴N95&#xff08;KN95&#xff09;口罩的话也可以. 在高风险环境&#xff08;像医院、疫情防控期间&#xff09;&#xff0c;一定要选不带呼吸阀门的N95口罩KN95&#xff09…

贪心算法概述

贪心算法总是作出当前看来最好的选择&#xff0c;是局部最优 可以使用贪心算法的问题一般具有两个重要的性质 贪心选择性质最优子结构性质 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到 其与动态规划的问题区别在于&#xff0c;动态规划算法通…

SD下载、安装、使用、卸载-Stable Diffusion整合包v4.10发布!

目录 前言概述 SD安装1、安装软件2、启动3、配置4、运行5、测试 导入SD模型【决定画风】常用模型下载安装模型 SD卸载SD文生图提示词提示词使用技巧提示词的高级使用技巧强调关键词 前言 我向来不喜欢搞一些没有用的概念&#xff0c;所以直接整理可能用到的东西。 sd简单的说…

【LeetCode】2506、统计相似字符串对的数目

【LeetCode】2506、统计相似字符串对的数目 文章目录 一、哈希表位运算1.1 哈希表位运算 二、多语言解法 一、哈希表位运算 1.1 哈希表位运算 每个字符串, 可用一个 int 表示. (每个字符 是 int 的一个位) 哈希表记录各 字符组合 出现的次数 步骤: 遇到一个字符串, 得到 ma…

【GO基础学习】gin的使用

文章目录 模版使用流程参数传递路由分组数据解析和绑定gin中间件 模版使用流程 package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {// 1.创建路由r : gin.Default()// 2.绑定路由规则&#xff0c;执行的函数// gin.Context&#x…

溯源取证-手机取证-简单篇

好久没有写了&#xff0c;水一篇简单的 案例摘要&#xff1a; 我们目前正在调查一起谋杀案&#xff0c;目前已经获得了受害者的手机作为关键证据。在与证人和受害者核心圈子相关人员进行面谈后&#xff0c;您的目标是分析我们收集的信息&#xff0c;并努力追踪证据&#xff0…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 四、提示范式&#xff08;Explanation for Prompting Paradigm&#xff09; 随着语言模型规模的扩大&#xff0c;基于提示&#xff08;prom…

基于TCP的Qt网络通信

基于TCP的Qt网络通信 项目源码&#xff1a;https://github.com/say-Hai/TcpSocketLearn/tree/QTcpSocket 在标准C没有提供专门用于套接字通信的类&#xff0c;所以只能使用操作系统提供的基于C的API函数&#xff0c;但是Qt就不一样了&#xff0c;它是C的一个框架并且里边提供了…

java vscode springboot 问题汇总

问题1 VSCODE配置SpringBoot&#xff0c;创建新项目运行时报错程序包不存在 找不到符号解决方法 选择Run Java即可 , 不是Run Code DemoApplication.java:3: 错误: 程序包org.springframework.boot不存在 import org.springframework.boot.SpringApplication; …

BLIP论文笔记

论文地址 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 论文思想 其实Clip就相当于只用了ITC

linux上使用cmake编译的方法

一、hello 例程仅基于一个cpp文件 C文件或工程进行编译时可以使用g指令&#xff08;需要对每一个程序和源文件分别使用g指令编译&#xff09;&#xff0c;当程序变大时&#xff0c;一个工程文件往往会包含很文件夹和源文件&#xff0c;这时我们需要的编译指令将越来越长&#…

Speech Recognition vs. Voice Recognition | 语音识别工作原理 | 模型训练 | 应用

注&#xff1a;Speech Recognition 与 Voice Recognition 机翻混淆&#xff0c;未校。 Speech Recognition vs. Voice Recognition: In Depth Comparison 语音识别与语音识别&#xff1a;深度比较 Calendar12 July 2023 Have you ever stopped to think about how your voice…

Tushare提示本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2

1、解决办法 tushare pro版本需要注册登录后获取tocken然后在代码中配置接口即可。 2、如何获取tushare&#xff1f; tushare是免费、开源的python财经数据接口&#xff0c;现在使用需要先注册tushare账号 1、跳转到tushare注册页面 Tusharez注册 Tushare数据 2、注册成功…

高频 SQL 50 题(基础版)_1068. 产品销售分析 I

销售表 Sales&#xff1a; (sale_id, year) 是销售表 Sales 的主键&#xff08;具有唯一值的列的组合&#xff09;。 product_id 是关联到产品表 Product 的外键&#xff08;reference 列&#xff09;。 该表的每一行显示 product_id 在某一年的销售情况。 注意: price 表示每…