从零开始学数据库(MySQL):基础概念、安装与核心操作全攻略

从零开始学数据库(MySQL):基础概念、安装与核心操作全攻略 摘要本文是学习数据库的入门指南以最流行的开源关系型数据库 MySQL 为例系统性地介绍了数据库核心概念、MySQL的安装配置、数据定义语言DDL以及数据查询语言DQL。无论你是刚接触编程的新手还是希望巩固基础的开发者这篇文章都能帮助你快速上手数据库。目录第一章数据库与MySQL初探1.1 数据库是什么1.2 核心术语扫盲1.3 数据库的分类关系型 vs. 非关系型1.4 为什么选择MySQL第二章MySQL的安装与环境配置2.1 下载与安装2.2 基本配置2.3 验证安装2.4 可选配置环境变量第三章数据库与表的核心操作3.1 数据库的结构3.2 数据库基本命令3.3 数据表的创建与数据类型3.4 表结构修改第四章数据的“增删改查”CRUD4.1 插入数据 (Create)4.2 查询数据 (Read)4.3 更新数据 (Update)4.4 删除数据 (Delete)第五章进阶查询技巧5.1 聚合函数5.2 分组查询 (GROUP BY)5.3 正则表达式查询 (REGEXP)总结与练习建议第一章数据库与MySQL初探1.1 数据库是什么想象一下你的手机通讯录里面整齐地记录着朋友的姓名和电话。当你需要联系某人时你可以快速查找、修改或删除他的信息。这个“通讯录”就是生活中最简单的“数据库”。在计算机世界中数据库就是一个专门用于存储、组织和管理数据的电子仓库。我们日常使用的软件如游戏、社交App、新闻网站、电商平台等其背后都离不开数据库的支持。1.2 核心术语扫盲在学习具体操作前我们先理解几个基本概念数据 (Data)存储在数据库中的信息可以是数字、文字、图片、声音等。数据库 (Database, DB)存储数据的集合是数据的“仓库”。数据库管理系统 (DBMS)操纵和管理数据库的大型软件比如我们即将学习的MySQL。它负责建立、使用和维护数据库保证数据的安全和完整。结构化查询语言 (SQL)一种专门用来与数据库沟通的语言我们可以通过它来存取、查询、更新和管理数据库中的数据。1.3 数据库的分类关系型 vs. 非关系型目前主流数据库主要分为两类关系型数据库 (RDBMS)核心数据以“表格”的形式组织表格之间可以通过“关系”如主键-外键连接。特点结构清晰容易理解强调数据的一致性支持复杂的查询。代表MySQL, Oracle, SQL Server, PostgreSQL。非关系型数据库 (NoSQL)核心不使用固定的表格结构存储方式更灵活如键值对、文档、图。特点通常读写效率高易于水平扩展适合处理海量、非结构化数据。代表MongoDB, Redis, Cassandra。本系列教程将聚焦于关系型数据库并以市场占有率极高的MySQL作为学习工具。1.4 为什么选择MySQL免费开源对于个人学习者和中小企业来说是绝佳选择。性能优异速度快尤其适合Web应用。生态强大社区活跃由阿里发起的“去Oracle化”运动也极大地推动了MySQL在中国互联网企业的应用。第二章MySQL的安装与环境配置2.1 下载与安装访问 MySQL 官网 (https://www.mysql.com/)。进入“Downloads”页面找到“MySQL Community (GPL) Downloads »”。选择适合你操作系统的版本如 Windows 系统选择“MySQL Installer for Windows”进行下载。运行安装程序在安装类型中选择“Server only”仅安装服务器或“Developer Default”开发者默认安装包含其他工具即可。2.2 基本配置安装过程中安装向导会引导你进行基本配置设置 root 用户密码这是数据库的最高权限管理员账户请务必设置一个强密码并牢记。配置服务通常保持默认设置将MySQL配置为Windows系统服务可以开机自启。2.3 验证安装安装完成后可以在开始菜单中找到“MySQL 5.7 Command Line Client”版本号可能不同点击后输入你设置的 root 密码。如果出现mysql提示符恭喜你MySQL服务启动成功2.4 可选配置环境变量为了方便在任何路径下通过命令行访问MySQL建议将MySQL的bin目录例如C:\Program Files\MySQL\MySQL Server 5.7\bin添加到系统的Path环境变量中。完成后在任意命令行窗口输入mysql -u root -p即可登录。第三章数据库与表的核心操作3.1 数据库的结构在关系型数据库中数据存储在“表”中。一个数据库包含多张表每张表类似于一个Excel表格列 (Column)也称为字段代表数据的某种属性如“姓名”、“年龄”。行 (Row)也称为记录代表一条具体的数据如一个学生的完整信息。主键 (Primary Key)能够唯一标识表中每一行的一列或一组列。例如学生的“学号”可以作为主键。3.2 数据库基本命令登录MySQL后我们可以使用以下SQL命令-- 查看当前MySQL服务器上有哪些数据库 SHOW DATABASES; -- 创建一个名为 my_database 的新数据库 CREATE DATABASE my_database; -- 选择使用 my_database 这个数据库后续操作都在此库中进行 USE my_database; -- 谨慎操作删除一个数据库 DROP DATABASE my_database;3.3 数据表的创建与数据类型创建表时需要定义表名、列名以及每一列的数据类型。MySQL支持丰富的数据类型主要分为三类数值类型用于存储数字。INT整数如年龄、ID。FLOAT/DOUBLE浮点数小数。DECIMAL(M,D)精确小数适合存储金额。M是总位数D是小数点后的位数。日期和时间类型DATE日期格式 ‘YYYY-MM-DD’。DATETIME日期和时间格式 ‘YYYY-MM-DD HH:MM:SS’。TIMESTAMP时间戳常用于记录数据创建或更新时间。字符串类型CHAR(n)定长字符串。如果存入的字符不足n位会用空格补齐查询速度快。VARCHAR(n)变长字符串。按实际长度存储更节省空间。n代表最大字符数。创建表的例子CREATE TABLE students ( student_id INT PRIMARY KEY AUTO_INCREMENT, -- 学号主键自动增长 name VARCHAR(50) NOT NULL, -- 姓名可变字符串不能为空 age INT, -- 年龄整数 gender CHAR(1) DEFAULT 男, -- 性别定长字符默认‘男’ enrollment_date DATE -- 入学日期 );3.4 表结构修改表创建后可以根据需求进行修改-- 查看当前数据库中的所有表 SHOW TABLES; -- 查看 students 表的详细结构 DESC students; -- 或 SHOW COLUMNS FROM students; -- 为 students 表增加一个 email 列 ALTER TABLE students ADD email VARCHAR(100); -- 修改 email 列的数据类型 ALTER TABLE students MODIFY email VARCHAR(150); -- 将 email 列重命名为 contact_email ALTER TABLE students CHANGE email contact_email VARCHAR(150); -- 删除 contact_email 列 ALTER TABLE students DROP contact_email; -- 谨慎操作删除 students 表 DROP TABLE students;第四章数据的“增删改查”CRUD这是与数据库交互最频繁的操作。4.1 插入数据 (Create)使用INSERT INTO语句。INSERT INTO students (name, age, gender, enrollment_date) VALUES (张三, 20, 男, 2023-09-01); -- 可以一次插入多行 INSERT INTO students (name, age) VALUES (李四, 19), (王五, 21);4.2 查询数据 (Read)使用SELECT语句这是最核心、最灵活的语句。-- 1. 查询所有列的所有行 SELECT * FROM students; -- 2. 只查询特定的列 SELECT name, age FROM students; -- 3. 使用 WHERE 子句进行条件筛选 SELECT * FROM students WHERE age 19; SELECT * FROM students WHERE gender 女; SELECT * FROM students WHERE age BETWEEN 18 AND 20; -- 年龄在18到20之间 -- 4. 使用 LIKE 进行模糊查询 SELECT * FROM students WHERE name LIKE 张%; -- 查询姓‘张’的学生 SELECT * FROM students WHERE name LIKE %小%; -- 查询名字中包含‘小’的学生 -- 5. 使用 ORDER BY 进行排序 SELECT * FROM students ORDER BY age DESC; -- 按年龄降序排列 SELECT * FROM students ORDER BY enrollment_date ASC; -- 按入学日期升序排列 -- 6. 使用 LIMIT 限制返回结果数量 SELECT * FROM students LIMIT 5; -- 返回前5条记录 SELECT * FROM students LIMIT 2, 3; -- 跳过前2条返回接下来的3条常用于分页 -- 7. 使用 DISTINCT 去除重复值 SELECT DISTINCT gender FROM students;4.3 更新数据 (Update)使用UPDATE语句。务必注意 WHERE 条件否则会更新表中所有行-- 将学号为1的学生的年龄更新为22岁 UPDATE students SET age 22 WHERE student_id 1; -- 同时更新多个字段 UPDATE students SET age age 1, gender 男 WHERE name 李四;4.4 删除数据 (Delete)使用DELETE FROM语句。务必注意 WHERE 条件否则会清空整个表-- 删除学号为5的学生记录 DELETE FROM students WHERE student_id 5;第五章进阶查询技巧掌握了基本查询后可以学习更强大的工具。5.1 聚合函数用于对一组值执行计算并返回单个值。-- COUNT(): 统计行数 SELECT COUNT(*) AS total_students FROM students; -- AVG(): 计算平均值 SELECT AVG(age) AS average_age FROM students; -- SUM(): 计算总和 SELECT SUM(age) FROM students; -- 这个例子不太恰当但语法如此 -- MAX() / MIN(): 找出最大值/最小值 SELECT MAX(age) AS max_age, MIN(age) AS min_age FROM students;5.2 分组查询 (GROUP BY)与聚合函数结合用于将数据按某个或某几个字段分组然后对每个组进行聚合计算。-- 统计男生和女生各有多少人 SELECT gender, COUNT(*) AS count FROM students GROUP BY gender; -- 查询每个年龄段的学生数量 SELECT age, COUNT(*) FROM students GROUP BY age;使用HAVING子句可以对分组后的结果进行筛选WHERE是对原始行筛选。-- 查询学生数量超过2人的性别 SELECT gender, COUNT(*) AS num FROM students GROUP BY gender HAVING num 2;5.3 正则表达式查询 (REGEXP)当LIKE无法满足复杂的模式匹配时可以使用更强大的正则表达式。-- 查询名字以‘赵’或‘钱’开头的学生 SELECT * FROM students WHERE name REGEXP ^[赵钱]; -- 查询电话号码中包含连续三个相同数字的学生 SELECT * FROM students WHERE phone REGEXP ([0-9])\\1{2};总结与练习建议本篇带你系统了解了数据库的核心概念、MySQL的安装、以及最关键的SQL操作。要真正掌握动手练习是关键。在接下来的学习中你还会接触到表连接、子查询、索引、事务等更高级的主题。打好本章的基础未来的学习之路将更加顺畅。祝你学习愉快