MySQL 是目前最流行的开源关系型数据库管理系统之一,广泛应用于Web开发、数据分析等场景。掌握基础的增删改查操作是入门的关键。本文将从环境准备开始,带你深入,mysql
一、前置准备:安装与连接 MySQL
1. 安装 MySQL
- Windows:前往 https://dev.mysql.com/ 下载安装包(选择 Community Server),按向导完成安装(注意记录 root 用户密码)。
- macOS:推荐通过 Homebrew 安装:
brew install mysql
- Linux(Ubuntu/Debian):
sudo apt-get update && sudo apt-get install mysql-server
2. 连接 MySQL
安装完成后,通过命令行工具连接 MySQL(需先启动服务):
mysql -u root -p # 输入安装时设置的 root 密码
成功连接后,会看到 MySQL 的命令行提示符 mysql>
。
二、数据库操作:创建与管理数据库
数据库(Database)是存储数据的容器,用于组织多个相关表。以下是数据库的核心操作:
1. 查看所有数据库
SHOW DATABASES; #列出服务器中所有数据库
2. 创建数据库
CREATE DATABASE IF NOT EXISTS school; #创建名为 "school" 的数据库(若不存在)
IF NOT EXISTS
是可选参数,避免因数据库已存在而报错。- 建议指定字符集(如
utf8mb4
,支持 emoji)和存储引擎(如InnoDB
,默认引擎):CREATE DATABASE school DEFAULT CHARSET utf8mb4
3. 切换数据库
USE school; #切换到 "school" 数据库(后续操作将基于此数据库)
执行后提示 Database changed
表示切换成功。
4. 删除数据库(谨慎!)
DROP DATABASE IF EXISTS school; #删除名为 "school" 的数据库(数据将永久丢失)
三、表操作:创建与管理数据表
表(Table)是数据库的核心结构,由行和列组成。创建表时需定义字段的名称、数据类型、约束(如主键、非空等)。
1. 查看当前数据库的表
SHOW TABLES; #列出当前数据库中的所有表(若未创建表则无结果)
2. 创建表
以创建学生表 students
为例:
CREATE TABLE students (id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学生ID(主键)',name VARCHAR(50) NOT NULL COMMENT '姓名',gender ENUM('男','女','其他') DEFAULT '其他' COMMENT '性别',age TINYINT UNSIGNED COMMENT '年龄(0-255)',birth DATE COMMENT '出生日期',class VARCHAR(20) NOT NULL COMMENT '班级',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',PRIMARY KEY (id) -- 指定主键(唯一标识一条记录)
)DEFAULT CHARSET utf8mb4;
关键参数说明:
-
数据类型:
INT UNSIGNED
:无符号整数(取值范围 0~4294967295)。VARCHAR(50)
:可变长度字符串(最多50字符)。ENUM('男','女','其他')
:枚举类型(仅允许指定值)。DATE
:日期(格式YYYY-MM-DD
)。DATETIME
:日期时间(格式YYYY-MM-DD HH:MM:SS
)。CURRENT_TIMESTAMP
:自动填充当前时间(插入或更新时)。
-
约束:
NOT NULL
:字段不可为空。AUTO_INCREMENT
:自增(主键常用,插入新记录时自动生成唯一ID)。DEFAULT
:字段默认值(未显式赋值时使用)。PRIMARY KEY
:主键(唯一且非空,用于快速查找记录)。
3. 查看表结构
DESCRIBE students; -- 或简写 DESC students
输出结果会显示字段名、类型、是否为空、默认值、键等信息。
4. 修改表结构
(1)添加字段
ALTER TABLE students
ADD COLUMN email VARCHAR(100) UNIQUE COMMENT '邮箱(唯一)' AFTER class;
AFTER class
表示将新字段email
添加到class
字段之后(可选,默认添加到末尾)。
(2)修改字段类型
ALTER TABLE students
MODIFY COLUMN age SMALLINT UNSIGNED COMMENT '年龄(调整类型)';
(3)删除字段
ALTER TABLE students
DROP COLUMN birth; -- 删除 `birth` 字段(数据将丢失!)
5. 删除表(谨慎!)
DROP TABLE IF EXISTS students; -- 删除 "students" 表(数据永久丢失)
四、数据操作:增删改查(CRUD)
1. 插入数据(Create)
(1)插入单条记录
INSERT INTO students (name, gender, age, class)
VALUES ('张三', '男', 18, '高三1班');
- 若未指定字段(如
id
和create_time
),则使用默认值(id
自增,create_time
自动填充当前时间)。
(2)插入多条记录
INSERT INTO students (name, gender, age, class)
VALUES ('李四', '女', 17, '高三1班'),('王五', '男', 19, '高三2班'),('赵六', '其他', 18, '高三1班');
2. 查询数据(Read)
查询是最常用操作,通过 SELECT
语句实现。
(1)基础查询(查询所有字段)
SELECT * FROM students; -- * 表示所有字段
(2)指定字段查询
SELECT name, age, class FROM students; -- 只查询姓名、年龄、班级
(3)条件过滤(WHERE 子句)
-- 查询高三1班的男生,年龄 >=18
SELECT * FROM students
WHERE class = '高三1班' AND gender = '男' AND age >= 18;-- 查询年龄在17-19岁之间的学生(BETWEEN ... AND)
SELECT * FROM students
WHERE age BETWEEN 17 AND 19;-- 查询姓名包含“张”的学生(LIKE 模糊查询,% 匹配任意字符)
SELECT * FROM students
WHERE name LIKE '%张%';-- 查询性别为“女”或“其他”的学生(IN 枚举值)
SELECT * FROM students
WHERE gender IN ('女', '其他');
(4)排序(ORDER BY)
-- 按年龄降序排序(年龄大的在前)
SELECT * FROM students
ORDER BY age DESC;-- 先按班级升序,再按年龄降序(多字段排序)
SELECT * FROM students
ORDER BY class ASC, age DESC;
(5)分组与聚合(GROUP BY + 聚合函数)
统计每个班级的学生人数:
SELECT class, COUNT(*) AS student_count -- COUNT(*) 统计记录数
FROM students
GROUP BY class; -- 按班级分组
(6)分页(LIMIT)
查询第2页数据(每页10条):
SELECT * FROM students
LIMIT 10 OFFSET 10; -- OFFSET 表示跳过的记录数(第2页从第11条开始)
-- 简写:LIMIT 10, 10(前10条跳过,取接下来的10条)
3. 修改数据(Update)
-- 将姓名为“张三”的学生年龄改为19岁
UPDATE students
SET age = 19
WHERE name = '张三'; -- 必须加 WHERE 条件,否则会修改所有记录!
4. 删除数据(Delete)
-- 删除高三2班的学生记录
DELETE FROM students
WHERE class = '高三2班'; -- 必须加 WHERE 条件,否则会删除全表数据!
五、注意事项与最佳实践
- 编码问题:创建数据库/表时指定
CHARSET=utf8mb4
,避免中文或 emoji 乱码。 - 主键设计:每张表建议设置主键(如自增
id
),提高查询效率。 - 避免全表操作:
UPDATE
和DELETE
语句必须加WHERE
条件,否则会修改/删除所有数据(可先SELECT
验证条件)。 - 字段类型优化:根据业务需求选择合适的数据类型,如年龄用
TINYINT
而非INT
,节省空间。