基础连接与环境操作
1. 连接 MySQL 服务器
bash
运行
# 本地连接(默认端口3306)
mysql -u 用户名 -p
# 指定主机和端口连接
mysql -h 主机IP -P 端口号 -u 用户名 -p
- 示例:
mysql -h 127.0.0.1 -P 3306 -u root -p,回车后输入密码即可登录。 - 退出 MySQL:输入
exit;或quit;并回车。
2. 查看基础信息
sql
-- 查看所有数据库
SHOW DATABASES;
-- 查看当前使用的数据库
SELECT DATABASE();
-- 查看数据库版本
SELECT VERSION();
-- 查看当前用户
SELECT USER();
二、数据库(Database)操作
1. 创建数据库
sql
-- 基础创建(指定字符集和排序规则,避免中文乱码)
CREATE DATABASE IF NOT EXISTS 数据库名
DEFAULT CHARACTER SET utf8mb4 -- 推荐utf8mb4(支持emoji和所有中文)
DEFAULT COLLATE utf8mb4_unicode_ci;
- 示例:
CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; IF NOT EXISTS:避免重复创建报错,是必加的最佳实践。
2. 选择 / 使用数据库
sql
USE 数据库名;
- 示例:
USE test_db;(后续操作默认针对该数据库)
3. 修改数据库
sql
-- 修改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4. 删除数据库
sql
-- 谨慎操作!删除后数据不可恢复
DROP DATABASE IF EXISTS 数据库名;
三、数据表(Table)操作
1. 创建数据表
sql
-- 示例:创建用户表
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名:非空+唯一
password VARCHAR(100) NOT NULL, -- 密码(建议存储加密后的值)
age TINYINT UNSIGNED DEFAULT 0, -- 年龄:无符号整数,默认0
create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间:默认当前时间
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 核心参数说明:
ENGINE=InnoDB:默认存储引擎,支持事务、外键,是生产环境首选;AUTO_INCREMENT:字段自增(仅适用于数值型主键);NOT NULL:强制字段不能为空,避免脏数据;DEFAULT:设置字段默认值。
2. 查看数据表信息
sql
-- 查看当前数据库所有表
SHOW TABLES;
-- 查看表结构(核心)
DESC 表名; -- 简写
-- 或详细结构
SHOW CREATE TABLE 表名;
3. 修改数据表
sql
-- 1. 添加字段
ALTER TABLE user ADD COLUMN email VARCHAR(100) DEFAULT NULL AFTER password;
-- 2. 修改字段(类型/约束)
ALTER TABLE user MODIFY COLUMN age INT UNSIGNED DEFAULT 0;
-- 3. 重命名字段
ALTER TABLE user CHANGE COLUMN email user_email VARCHAR(100) DEFAULT NULL;
-- 4. 删除字段
ALTER TABLE user DROP COLUMN user_email;
-- 5. 重命名表
ALTER TABLE user RENAME TO t_user;
4. 删除数据表
sql
DROP TABLE IF EXISTS t_user;
四、数据(CRUD)核心操作
1. 新增数据(CREATE)
sql
-- 方式1:指定字段(推荐,字段顺序可自定义)
INSERT INTO user (username, password, age)
VALUES ('zhangsan', '123456', 20), ('lisi', '654321', 25); -- 批量插入
-- 方式2:不指定字段(需按表字段顺序填写所有值)
INSERT INTO user VALUES (NULL, 'wangwu', '987654', 30, NOW());
- 主键自增时,对应字段填
NULL即可自动生成。
2. 查询数据(READ)
sql
-- 1. 基础查询
SELECT id, username, age FROM user; -- 指定字段
SELECT * FROM user; -- 查询所有字段(生产环境慎用,性能差)
-- 2. 条件查询(WHERE)
SELECT * FROM user WHERE age > 20 AND username = 'lisi';
-- 3. 排序(ORDER BY):ASC升序(默认),DESC降序
SELECT * FROM user ORDER BY age DESC;
-- 4. 分页(LIMIT):offset起始位置(从0开始),size查询条数
SELECT * FROM user LIMIT 0, 10; -- 第1页,每页10条
SELECT * FROM user LIMIT 10, 10; -- 第2页,每页10条
-- 5. 聚合查询
SELECT COUNT(*) AS total FROM user; -- 总数
SELECT MAX(age) AS max_age FROM user; -- 最大年龄
SELECT AVG(age) AS avg_age FROM user; -- 平均年龄
3. 更新数据(UPDATE)
sql
-- 必加WHERE条件!否则更新全表数据
UPDATE user SET password = 'abc123', age = 22 WHERE id = 1;
4. 删除数据(DELETE)
sql
-- 1. 条件删除(推荐)
DELETE FROM user WHERE id = 3;
-- 2. 清空全表(自增主键重置)
TRUNCATE TABLE user; -- 比DELETE * 效率高,不可回滚
- 注意:
DELETE可加 WHERE 条件,TRUNCATE直接清空,生产环境需谨慎。
五、索引操作(性能优化核心)
1. 创建索引
sql
-- 1. 普通索引(最常用)
CREATE INDEX idx_user_age ON user(age);
-- 2. 唯一索引(字段值唯一)
CREATE UNIQUE INDEX idx_user_username ON user(username);
-- 3. 联合索引(多个字段)
CREATE INDEX idx_user_age_username ON user(age, username);
2. 查看索引
sql
SHOW INDEX FROM user;
3. 删除索引
sql
DROP INDEX idx_user_age ON user;
六、事务操作(保证数据一致性)
sql
-- 开启事务
START TRANSACTION;
-- 执行操作(示例:转账)
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
-- 提交事务(所有操作生效)
COMMIT;
-- 回滚事务(操作出错时,恢复到事务开始前状态)
-- ROLLBACK;
- 注意:仅
InnoDB引擎支持事务。
总结
- 基础规范 :创建库 / 表时必加
IF NOT EXISTS,指定utf8mb4字符集,优先使用InnoDB引擎; - 核心操作 :CRUD 中,
UPDATE/DELETE必须加WHERE条件,查询避免用SELECT *; - 性能优化:对常用查询字段创建索引(普通 / 唯一 / 联合),但索引不宜过多(影响插入 / 更新效率)。