MySQL 数据库操作笔记
·
MySQL 数据库操作
一、基础连接与环境操作
1. 连接 MySQL 服务器
bash
运行
# 本地连接(默认端口3306)
mysql -u 用户名 -p
# 示例:使用root用户连接
mysql -u root -p
# 远程连接(指定IP和端口)
mysql -h 服务器IP -P 端口号 -u 用户名 -p
# 示例:连接192.168.1.100的MySQL,端口3306
mysql -h 192.168.1.100 -P 3306 -u root -p
2. 查看基础信
sql
-- 查看当前MySQL版本
SELECT VERSION();
-- 查看当前登录用户
SELECT USER();
-- 查看所有数据库
SHOW DATABASES;
二、数据库(Database)
1. 创建数据库
sql
-- 基础创建(指定字符集和排序规则,避免中文乱码)
CREATE DATABASE IF NOT EXISTS 数据库名
CHARACTER SET utf8mb4 -- 推荐utf8mb4(兼容emoji,比utf8更完整)
COLLATE utf8mb4_unicode_ci;
-- 示例:创建名为test_db的数据库
CREATE DATABASE IF NOT EXISTS test_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
2. 选择 / 使用数据库
sql
-- 切换到指定数据库(后续操作基于该库)
USE test_db;
3. 修改数据库
sql
-- 修改数据库字符集
ALTER DATABASE test_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
4. 删除数据库
sql
-- 谨慎操作!删除数据库(包含所有表和数据)
DROP DATABASE IF EXISTS test_db;
三、数据表(Table)操作
1. 创建数据表
sql
-- 示例:创建用户表(user)
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;
2. 查看数据表
sql
-- 查看当前数据库下所有表
SHOW TABLES;
-- 查看表结构(字段名、类型、约束等)
DESC user; -- 等价于 DESCRIBE user;
-- 查看表的创建语句(含引擎、字符集等)
SHOW CREATE TABLE user;
3. 修改数据表
sql
-- 1. 添加字段(示例:给user表加email字段)
ALTER TABLE user
ADD COLUMN email VARCHAR(100) UNIQUE AFTER password;
-- 2. 修改字段(示例:修改age字段类型和默认值)
ALTER TABLE user
MODIFY COLUMN age INT UNSIGNED DEFAULT 18;
-- 3. 删除字段(示例:删除email字段)
ALTER TABLE user
DROP COLUMN email;
-- 4. 修改表名
ALTER TABLE user
RENAME TO t_user;
4. 删除数据表
sql
-- 谨慎操作!删除表(包含所有数据)
DROP TABLE IF EXISTS user;
四、数据(Data)操作(CRUD)
1. 新增数据(CREATE)
sql
-- 1. 插入单条数据(指定字段)
INSERT INTO user (username, password, age)
VALUES ('zhangsan', '123456', 20);
-- 2. 插入多条数据
INSERT INTO user (username, password, age)
VALUES
('lisi', '654321', 22),
('wangwu', '987654', 25);
-- 3. 插入所有字段(省略字段名,需按表结构顺序)
INSERT INTO user
VALUES (NULL, 'zhaoliu', '111222', 19, '2026-03-19 10:00:00');
-- 主键自增时,对应位置填NULL即可,MySQL会自动生成值
2. 查询数据(READ)
sql
-- 1. 查询所有字段(* 表示所有,生产环境尽量避免,指定具体字段更高效)
SELECT * FROM user;
-- 2. 查询指定字段
SELECT username, age FROM user;
-- 3. 条件查询(WHERE)
SELECT * FROM user WHERE age > 20; -- 年龄大于20
SELECT * FROM user WHERE username = 'zhangsan'; -- 用户名等于zhangsan
SELECT * FROM user WHERE age BETWEEN 20 AND 25; -- 年龄在20-25之间
SELECT * FROM user WHERE username LIKE 'z%'; -- 用户名以z开头(模糊查询)
-- 4. 排序(ORDER BY):ASC升序(默认),DESC降序
SELECT * FROM user ORDER BY age DESC;
-- 5. 分页查询(LIMIT):LIMIT 起始位置, 条数(起始位置从0开始)
SELECT * FROM user LIMIT 0, 2; -- 第1页,每页2条
SELECT * FROM user LIMIT 2, 2; -- 第2页,每页2条
-- 6. 去重查询(DISTINCT)
SELECT DISTINCT age FROM user; -- 去重后查询年龄
-- 7. 聚合查询(常用函数:COUNT/SUM/AVG/MAX/MIN)
SELECT COUNT(*) FROM user; -- 统计总条数
SELECT AVG(age) FROM user; -- 平均年龄
SELECT MAX(age) FROM user; -- 最大年龄
3. 更新数据(UPDATE)
sql
-- 修改单条数据(必须加WHERE,否则修改全表!)
UPDATE user
SET password = '888888', age = 21
WHERE username = 'zhangsan';
-- 批量修改(示例:所有年龄<20的用户,年龄+1)
UPDATE user
SET age = age + 1
WHERE age < 20;
4. 删除数据(DELETE)
sql
-- 删除指定数据(必须加WHERE,否则删除全表!)
DELETE FROM user WHERE username = 'wangwu';
-- 清空表(保留表结构,自增主键重置为1)
TRUNCATE TABLE user;
五、权限与用户管理
1. 创建用户
sql
-- 创建用户(仅允许本地访问)
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'test123';
-- 创建用户(允许远程访问,% 表示任意IP)
CREATE USER 'test_user'@'%' IDENTIFIED BY 'test123';
2. 授权
sql
-- 授权:test_user拥有test_db所有表的所有权限
GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'%';
-- 授权:仅允许查询和插入test_db的user表
GRANT SELECT, INSERT ON test_db.user TO 'test_user'@'%';
-- 刷新权限(授权后必须执行)
FLUSH PRIVILEGES;
3. 撤销权限
sql
REVOKE INSERT ON test_db.user FROM 'test_user'@'%';
FLUSH PRIVILEGES;
4. 修改密码
sql
ALTER USER 'test_user'@'%' IDENTIFIED BY 'new_test123';
FLUSH PRIVILEGES;
5. 删除用户
sql
DROP USER 'test_user'@'%';
六、常用进阶操作
1. 事务操作(保证数据一致性)
sql
-- 开启事务
START TRANSACTION;
-- 执行操作(示例:转账)
UPDATE user SET balance = balance - 100 WHERE id = 1;
UPDATE user SET balance = balance + 100 WHERE id = 2;
-- 提交事务(确认操作)
COMMIT;
-- 回滚事务(出错时撤销操作)
-- ROLLBACK;
2. 索引(提升查询效率)
sql
-- 创建索引(示例:给user表的username字段加索引)
CREATE INDEX idx_user_username ON user(username);
-- 查看索引
SHOW INDEX FROM user;
-- 删除索引
DROP INDEX idx_user_username ON user;
总结
- 核心操作分层:数据库(库)→ 数据表(表)→ 数据(行),操作遵循「先选库,再操作表 / 数据」的逻辑;
- 安全操作原则:UPDATE/DELETE 必须加 WHERE 条件,DROP/TRUNCATE 谨慎执行,重要操作前建议备份;
- 最佳实践:字符集优先用 utf8mb4,存储引擎用 InnoDB,查询避免
SELECT *,高频查询字段加索引。
更多推荐




所有评论(0)