MySQL 数据库操作
前提:已安装 MySQL,推荐使用 MySQL 8.0+,命令行 / Navicat/DBeaver 等工具通用。
连接 MySQL 数据库
1.本地连接(命令行)
打开终端 / CMD,输入登录命令,回车后输入密码(安装时设置的 root 密码):
bash
mysql -u 用户名 -p
# 示例:默认管理员用户 root
mysql -u root -p
2.远程连接
bash
mysql -h 数据库IP -p 端口 -u 用户名 -p
# 示例:连接 192.168.1.100 的 3306 默认mysql端口
mysql -h 192.168.1.100 -p 3306 -u root -p
3.推出连接
bash
exit;
# 或
quit
数据库核心操作
MySQL 中库是存放表的容器,先操作库,再操作表。
1.查看所有数据库
sql
show databases;
2.创建数据库
语法:create database [if not exists] 库名 [字符集] [排序规则];
if not exists:避免重复创建报错- 字符集推荐
utf8mb4(支持 emoji 表情,MySQL 标准字符集)
sql
# 创建名为 test_db 的数据库
create database if not exists test_db
default character set utf8mb4
collate utf8mb4_unicode_ci;
3.使用数据库
操作表 / 数据前,必须先切换到目标库:
sql
use test_db;
4.查看数据库定义
sql
show create database test_db;
5.删除数据库
sql
drop database if exists test_db
数据表核心操作
表是存储数据的载体,需定义字段名、数据类型、约束。
1.常用数据类型
| 类型 | 说明 | 示例 |
|---|---|---|
INT |
整数(年龄、ID) | age INT |
VARCHAR(n) |
可变字符串(姓名、手机号) | name VARCHAR(20) |
TEXT |
长文本(描述、文章) | content TEXT |
DECIMAL(m,n) |
高精度小数(金额) | price DECIMAL(10,2) |
DATE |
日期(2025-01-01) | birth DATE |
DATETIME |
日期 + 时间(2025-01-01 12:00) | create_time DATETIME |
2.创建数据表
语法:create table 表名(字段一 类型 约束,字段二 类型 约束,...) 字符集;
示例:创建用户表 user
sql
create table if not exists user (
id int primary key auto_increment, --主键、自增(唯一标识)
name varchar(20) not null, --姓名,非空
age int default 18, --年龄,默认18
gender char(1) default '男', --性别,默认男
phone varchar(11) unique, --手机号,唯一
create_time datetime default NOW() --创建时间,默认当前时间
) engine=InnoDB DEFAULT CHARSET=utf8mb4;
关键字:
PRIMARY KEY:主键(唯一、非空,一张表只有一个)AUTO_INCREMENT:自增(仅配合主键整数使用)NOT NULL:非空UNIQUE:唯一DEFAULT:默认值ENGINE=InnoDB:默认存储引擎(支持事务、外键)
3.查看表
sql
-- 查看当前库所有表
SHOW TABLES;
-- 查看表结构(字段、类型、约束)
DESC user;
-- 查看表创建语句
SHOW CREATE TABLE user;
4.修改表(user 表)
sql
-- 1. 添加字段
ALTER TABLE user ADD email VARCHAR(50);
-- 2. 修改字段类型/约束
ALTER TABLE user MODIFY age INT NOT NULL;
-- 3. 重命名字段
ALTER TABLE user CHANGE phone mobile VARCHAR(11);
-- 4. 删除字段
ALTER TABLE user DROP email;
-- 5. 重命名表
ALTER TABLE user RENAME TO user_info;
5.删除表
sql
DROP TABLE IF EXISTS user;
数据增删改查(CRUD)核心操作
这是最常用的数据操作 ,简称 CRUD:
- C(Create):新增
- R(Read):查询
- U(Update):修改
- D(Delete):删除
1.新增数据
sql
-- 1. 全字段新增(按表字段顺序)
INSERT INTO user VALUES (NULL, '张三', 20, '男', '13800138000', NOW());
-- 2. 指定字段新增(推荐,灵活)
INSERT INTO user (name, age, mobile) VALUES ('李四', 22, '13900139000');
-- 3. 批量新增(效率高)
INSERT INTO user (name, mobile) VALUES
('王五', '13700137000'),
('赵六', '13600136000');
2.查询数据
基础查询
sql
-- 查询所有字段(* 代表所有)
SELECT * FROM user;
-- 查询指定字段
SELECT name, age, mobile FROM user;
-- 去重查询
SELECT DISTINCT gender FROM user;
条件查询
sql
-- 1. 等值查询
SELECT * FROM user WHERE name = '张三';
-- 2. 范围查询
SELECT * FROM user WHERE age BETWEEN 18 AND 25;
-- 3. 模糊查询(% 匹配任意字符,_ 匹配单个字符)
SELECT * FROM user WHERE name LIKE '张%';
-- 4. 多条件查询(AND/OR)
SELECT * FROM user WHERE age > 20 AND gender = '男';
3.修改数据
必须加 WHERE 条件,否则会修改全表数据
sql
-- 修改单字段
UPDATE user SET age = 23 WHERE name = '李四';
-- 修改多字段
UPDATE user SET gender = '女', age = 21 WHERE id = 2;
删除数据
必须加 WHERE 条件,否则会删除全表数据
sql
-- 删除指定数据
DELETE FROM user WHERE id = 3;
-- 清空表数据(保留表结构,自增ID重置)
TRUNCATE TABLE user;
高级查询
1.排序
sql
-- 升序(ASC,默认)
SELECT * FROM user ORDER BY age ASC;
-- 降序(DESC)
SELECT * FROM user ORDER BY create_time DESC;
2.分页查询
语法:LIMIT 起始索引, 每页条数(起始索引从 0 开始)
sql
-- 查询第1页,每页2条数据
SELECT * FROM user LIMIT 0, 2;
-- 查询第2页
SELECT * FROM user LIMIT 2, 2;
3.聚合函数
sql
-- 总条数
SELECT COUNT(*) FROM user;
-- 平均年龄
SELECT AVG(age) FROM user;
-- 最大/最小年龄
SELECT MAX(age), MIN(age) FROM user;
-- 求和
SELECT SUM(age) FROM user;
4.分组查询
sql
-- 按性别分组,统计每组人数
SELECT gender, COUNT(*) FROM user GROUP BY gender;
-- 分组后过滤(HAVING 必须配合 GROUP BY)
SELECT gender, COUNT(*) FROM user GROUP BY gender HAVING COUNT(*) > 1;
5.多表联查
示例 :创建订单表 order,关联用户表
sql
-- 创建订单表
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
order_no VARCHAR(30),
FOREIGN KEY (user_id) REFERENCES user(id) -- 外键关联用户表
);
常用联查
-
内连接(INNER JOIN):查询两张表匹配的数据
sqlSELECT u.name, o.order_no FROM user u INNER JOIN orders o ON u.id = o.user_id; -
左连接(LEFT JOIN):左表全量数据,右表匹配数据
sqlSELECT u.name, o.order_no FROM user u LEFT JOIN orders o ON u.id = o.user_id; -
右连接(RIGHT JOIN):右表全量数据,左表匹配数据
sqlSELECT u.name, o.order_no FROM user u RIGHT JOIN orders o ON u.id = o.user_id;