MySQL学习知识点(四)

简介: 教程来源 https://app-ad5sxofh8phd.appmiaoda.com 详解MySQL高级功能:视图(简化查询、保障安全)、临时表(会话级暂存);用户权限管理(创建/授权/角色控制);备份恢复策略(逻辑/物理/二进制日志/表空间传输),全面提升数据管理与运维能力。

十、视图与临时表

10.1 视图

-- 创建视图
CREATE VIEW user_orders AS
SELECT u.id, u.name, u.email, COUNT(o.id) AS order_count, SUM(o.amount) AS total_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name, u.email;

-- 使用视图
SELECT * FROM user_orders WHERE total_amount > 1000;

-- 可更新视图(满足条件时可更新)
CREATE VIEW active_users AS
SELECT id, name, email, age FROM users WHERE status = 'active';

-- 检查视图
CHECK TABLE active_users;

-- 查看视图定义
SHOW CREATE VIEW user_orders;

-- 修改视图
CREATE OR REPLACE VIEW user_orders AS
SELECT u.id, u.name, u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name, u.email;

-- 删除视图
DROP VIEW IF EXISTS user_orders;

-- 视图优点
-- 1. 简化复杂查询
-- 2. 数据安全(隐藏敏感字段)
-- 3. 逻辑数据独立性

10.2 临时表

-- 创建临时表
CREATE TEMPORARY TABLE temp_user_stats (
    user_id INT,
    order_count INT,
    total_amount DECIMAL(10,2)
);

-- 插入数据
INSERT INTO temp_user_stats
SELECT user_id, COUNT(*), SUM(amount)
FROM orders
GROUP BY user_id;

-- 使用临时表
SELECT * FROM temp_user_stats WHERE order_count > 5;

-- 连接查询中使用临时表
SELECT u.name, t.order_count
FROM users u
INNER JOIN temp_user_stats t ON u.id = t.user_id;

-- 临时表特点
-- 1. 只在当前会话可见
-- 2. 会话结束自动删除
-- 3. 可以创建索引
CREATE TEMPORARY TABLE temp_data (id INT, name VARCHAR(50));
CREATE INDEX idx_temp_id ON temp_data(id);

-- 内存临时表
CREATE TEMPORARY TABLE temp_memory (
    id INT,
    value VARCHAR(100)
) ENGINE=MEMORY;

十一、用户与权限管理

11.1 用户管理

-- 创建用户
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password';
CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'password';
CREATE USER 'web_user'@'%' IDENTIFIED BY 'web_pass';

-- 修改用户密码
ALTER USER 'app_user'@'localhost' IDENTIFIED BY 'new_password';
SET PASSWORD FOR 'app_user'@'localhost' = PASSWORD('new_password');

-- 删除用户
DROP USER 'app_user'@'localhost';

-- 查看所有用户
SELECT user, host FROM mysql.user;

-- 重命名用户
RENAME USER 'old_user'@'localhost' TO 'new_user'@'localhost';

11.2 权限管理

-- 授予权限
-- 所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'localhost';

-- 指定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.users TO 'app_user'@'localhost';

-- 数据库级别权限
GRANT CREATE, ALTER, DROP ON mydb.* TO 'admin'@'localhost';

-- 全局权限
GRANT SUPER, PROCESS ON *.* TO 'dba'@'localhost';

-- 授予权限并允许传递
GRANT SELECT ON mydb.* TO 'read_user'@'localhost' WITH GRANT OPTION;

-- 查看权限
SHOW GRANTS FOR 'app_user'@'localhost';
SHOW GRANTS FOR CURRENT_USER();

-- 撤销权限
REVOKE INSERT, UPDATE ON mydb.users FROM 'app_user'@'localhost';
REVOKE ALL PRIVILEGES ON mydb.* FROM 'app_user'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

11.3 角色管理(MySQL 8.0+)

-- 创建角色
CREATE ROLE 'app_read';
CREATE ROLE 'app_write';
CREATE ROLE 'app_admin';

-- 授予角色权限
GRANT SELECT ON mydb.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON mydb.* TO 'app_write';
GRANT ALL PRIVILEGES ON mydb.* TO 'app_admin';

-- 授予用户角色
GRANT 'app_read' TO 'user1'@'localhost';
GRANT 'app_write' TO 'user2'@'localhost';
GRANT 'app_admin' TO 'admin'@'localhost';

-- 设置默认角色
SET DEFAULT ROLE 'app_read' TO 'user1'@'localhost';

-- 激活角色
SET ROLE 'app_read';

-- 查看角色
SELECT * FROM mysql.role_edges;

十二、备份与恢复

12.1 逻辑备份(mysqldump)

# 备份单个数据库
mysqldump -u root -p mydb > mydb_backup.sql

# 备份多个数据库
mysqldump -u root -p --databases db1 db2 > dbs_backup.sql

# 备份所有数据库
mysqldump -u root -p --all-databases > all_dbs.sql

# 备份特定表
mysqldump -u root -p mydb users orders > users_orders.sql

# 只备份结构(无数据)
mysqldump -u root -p --no-data mydb > mydb_structure.sql

# 只备份数据(无结构)
mysqldump -u root -p --no-create-info mydb > mydb_data.sql

# 备份时包含存储过程、函数、触发器
mysqldump -u root -p --routines --triggers mydb > mydb_full.sql

# 条件备份(使用 WHERE)
mysqldump -u root -p mydb users --where="age > 18" > adult_users.sql

# 恢复备份
mysql -u root -p mydb < mydb_backup.sql

# 恢复时创建数据库
mysql -u root -p < all_dbs.sql

12.2 物理备份

-- 冷备份(停止服务)
sudo systemctl stop mysql
cp -r /var/lib/mysql /backup/mysql_backup
sudo systemctl start mysql

-- 热备份(使用 Percona XtraBackup)
# 安装 Percona XtraBackup
# 全量备份
xtrabackup --backup --target-dir=/backup/full

# 增量备份
xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full

# 准备恢复
xtrabackup --prepare --target-dir=/backup/full

# 恢复
xtrabackup --copy-back --target-dir=/backup/full

12.3 二进制日志恢复

-- 查看二进制日志状态
SHOW VARIABLES LIKE 'log_bin';
SHOW BINARY LOGS;

-- 查看二进制日志内容
SHOW BINLOG EVENTS IN 'mysql-bin.000001';

-- 根据时间点恢复
mysqlbinlog --start-datetime="2024-01-01 10:00:00" --stop-datetime="2024-01-01 12:00:00" mysql-bin.000001 | mysql -u root -p

-- 根据位置恢复
mysqlbinlog --start-position=100 --stop-position=500 mysql-bin.000001 | mysql -u root -p

12.4 表空间传输(MySQL 8.0+)

-- 导出表空间
FLUSH TABLES users FOR EXPORT;
-- 复制 .ibd 和 .cfg 文件
UNLOCK TABLES;

-- 导入表空间
CREATE TABLE users (...) ENGINE=InnoDB;
ALTER TABLE users DISCARD TABLESPACE;
-- 复制 .ibd 文件
ALTER TABLE users IMPORT TABLESPACE;

来源:
https://app-ad5sxofh8phd.appmiaoda.com

相关文章
|
3天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
10446 46
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
23天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
23591 121
|
9天前
|
人工智能 JavaScript API
解放双手!OpenClaw Agent Browser全攻略(阿里云+本地部署+免费API+网页自动化场景落地)
“让AI聊聊天、写代码不难,难的是让它自己打开网页、填表单、查数据”——2026年,无数OpenClaw用户被这个痛点困扰。参考文章直击核心:当AI只能“纸上谈兵”,无法实际操控浏览器,就永远成不了真正的“数字员工”。而Agent Browser技能的出现,彻底打破了这一壁垒——它给OpenClaw装上“上网的手和眼睛”,让AI能像真人一样打开网页、点击按钮、填写表单、提取数据,24小时不间断完成网页自动化任务。
2213 5