本文档风哥主要介绍MySQL Workbench的具体使用方法,包括界面操作、数据库管理、SQL开发、数据管理等内容,风哥教程参考MySQL官方文档MySQL
Workbench使用指南,适合DBA人员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 MySQL Workbench界面介绍
MySQL Workbench的界面设计直观易用,主要分为以下几个区域:
1. 主界面布局
+————————————————–+
| 菜单栏 |
+————————————————–+
| 工具栏 |
+———-+—————————————+
| | |
| 侧边栏 | 主工作区 |
| (导航) | |
| | |
+———-+—————————————+
| 输出区 |
+————————————————–+
| 状态栏 |
+————————————————–+
2. 菜单栏功能
File(文件):
– New Model: 创建新模型
– Open Model: 打开模型
– New Query Tab: 新建查询标签
– Open SQL Script: 打开SQL脚本
– Save: 保存
– Export/Import: 导入导出
Edit(编辑):
– Undo/Redo: 撤销/重做
– Cut/Copy/Paste: 剪切/复制/粘贴
– Find/Replace: 查找/替换
– Preferences: 首选项
View(视图):
– Panels: 面板显示
– Toolbars: 工具栏显示
– Output: 输出窗口
– Sidebar: 侧边栏
Database(数据库):
– Connect to Database: 连接数据库
– Manage Connections: 管理连接
– Reverse Engineer: 逆向工程
– Forward Engineer: 正向工程
– Synchronize Model: 同步模型
– Data Export: 数据导出
– Data Import: 数据导入
Query(查询):
– Execute: 执行查询
– Execute All: 执行所有
– Explain: 解释计划
– Format: 格式化
Server(服务器):
– Server Status: 服务器状态
– Client Connections: 客户端连接
– Users and Privileges: 用户和权限
– Status and System Variables: 状态和系统变量
– Options File: 配置文件
– Server Logs: 服务器日志
– Performance Dashboard: 性能仪表板
Tools(工具):
– Configuration: 配置
– Migration Wizard: 迁移向导
Help(帮助):
– Documentation: 文档
– About: 关于
3. 工具栏功能
连接工具栏:
– 新建连接
– 管理连接
– 连接到数据库
查询工具栏:
– 新建查询标签
– 打开SQL脚本
– 保存SQL脚本
– 执行查询
– 执行所有查询
– 解释计划
模型工具栏:
– 新建模型
– 打开模型
– 保存模型
– 添加表
– 添加关系
– 正向工程
– 逆向工程
4. 侧边栏功能
Management(管理):
– Server Status: 服务器状态
– Client Connections: 客户端连接
– Users and Privileges: 用户权限
– Status Variables: 状态变量
– System Variables: 系统变量
– Data Export: 数据导出
– Data Import: 数据导入
Schemas(模式):
– 数据库列表
– 表列表
– 视图列表
– 存储过程列表
– 函数列表
5. 主工作区
SQL编辑器:
– SQL代码编辑
– 语法高亮
– 自动补全
– 结果显示
模型编辑器:
– ER图设计
– 表结构设计
– 关系设计
管理面板:
– 服务器管理
– 用户管理
– 配置管理
6. 输出区
Action Output:
– 操作日志
– 执行结果
– 错误信息
History Output:
– SQL历史记录
– 执行时间
Text Output:
– 文本输出
– 调试信息
1.2 MySQL Workbench工作区
MySQL Workbench提供了多种工作区模式,以满足不同的工作需求:
1. SQL开发工作区
打开方式:
– 双击连接
– 菜单:Database -> Connect to Database
– 快捷键:Ctrl+U
界面布局:
+———-+—————————————+
| | SQL编辑区 |
| Schemas |—————————————+
| 侧边栏 | 结果区 |
| |—————————————+
| | 输出区 |
+———-+—————————————+
主要功能:
– SQL编写和执行
– 结果查看和编辑
– 数据库对象浏览
– 查询历史管理
2. 数据建模工作区
打开方式:
– 菜单:File -> New Model
– 快捷键:Ctrl+N
界面布局:
+———-+—————————————+
| | 模型概览 |
| Catalog |—————————————+
| 侧边栏 | ER图编辑区 |
| | |
+———-+—————————————+
主要功能:
– 创建ER图
– 设计表结构
– 定义关系
– 生成SQL脚本
3. 服务器管理工作区
打开方式:
– 菜单:Server -> Server Status
– 侧边栏:Management
界面布局:
+———-+—————————————+
| | 服务器状态仪表板 |
| Management|—————————————+
| 侧边栏 | 详细信息区 |
| | |
+———-+—————————————+
主要功能:
– 监控服务器状态
– 管理用户权限
– 查看日志
– 配置参数
4. 数据迁移工作区
打开方式:
– 菜单:Database -> Migration Wizard
界面布局:
+—————————————+
| 迁移向导 |
+—————————————+
| 源数据库配置 |
+—————————————+
| 目标数据库配置 |
+—————————————+
| 迁移选项 |
+—————————————+
| 进度和日志 |
+—————————————+
主要功能:
– 数据库迁移
– 版本升级
– 跨平台迁移
5. 工作区切换
标签页切换:
– 点击标签页名称
– 快捷键:Ctrl+Tab
工作区布局:
– 保存当前布局
– 恢复默认布局
– 自定义布局
6. 工作区自定义
面板显示:
– 菜单:View -> Panels
– 选择要显示的面板
工具栏自定义:
– 菜单:View -> Toolbars
– 选择要显示的工具栏
快捷键自定义:
– 菜单:Edit -> Preferences -> Shortcuts
– 修改快捷键绑定
1.3 MySQL Workbench导航操作
MySQL Workbench提供了便捷的导航功能,帮助用户快速定位和操作数据库对象:
1. Schemas侧边栏导航
数据库对象层次:
Schemas
├── production_db
│ ├── Tables
│ │ ├── users
│ │ ├── orders
│ │ └── products
│ ├── Views
│ │ └── user_orders_view
│ ├── Stored Procedures
│ │ └── calculate_total
│ └── Functions
│ └── get_user_count
└── testdb
└── …
操作方式:
– 单击:选择对象
– 双击:打开对象
– 右键:上下文菜单
2. 快捷菜单操作
数据库操作:
– Set as Default Schema: 设为默认数据库
– Create Schema: 创建数据库
– Drop Schema: 删除数据库
– Schema Inspector: 数据库检查器
表操作:
– Select Rows: 查询数据
– Edit Table Data: 编辑数据
– Create Table: 创建表
– Alter Table: 修改表
– Drop Table: 删除表
– Table Inspector: 表检查器
视图操作:
– Select Rows: 查询视图
– Create View: 创建视图
– Alter View: 修改视图
– Drop View: 删除视图
存储过程操作:
– Execute: 执行存储过程
– Create Stored Procedure: 创建存储过程
– Alter Stored Procedure: 修改存储过程
– Drop Stored Procedure: 删除存储过程
3. 快捷键导航
常用快捷键:
Ctrl+Shift+Enter 执行所有SQL
Ctrl+Enter 执行当前SQL
Ctrl+T 新建查询标签
Ctrl+W 关闭当前标签
Ctrl+Tab 切换标签
F5 刷新对象列表
Ctrl+Space 自动补全
Ctrl+B 格式化SQL
Ctrl+H 查看历史
4. 搜索功能
对象搜索:
– 在Schemas侧边栏输入关键字
– 自动过滤匹配的对象
SQL搜索:
– 菜单:Edit -> Find
– 快捷键:Ctrl+F
– 支持正则表达式
5. 收藏夹功能
添加收藏:
– 右键点击对象 -> Add to Favorites
管理收藏:
– 侧边栏 -> Favorites
– 可以创建文件夹分类
使用收藏:
– 双击收藏项快速访问
6. 历史记录导航
SQL历史:
– 菜单:Query -> Query History
– 查看执行过的SQL语句
– 双击可以重新加载
操作历史:
– 输出区 -> History Output
– 查看操作日志
7. 书签功能
添加书签:
– SQL编辑器中右键 -> Toggle Bookmark
– 或点击行号左侧
导航书签:
– 菜单:Edit -> Bookmarks
– 快速跳转到书签位置
8. 面板导航
显示/隐藏面板:
– 菜单:View -> Panels
– 选择要显示的面板
调整面板大小:
– 拖动面板边界
重置布局:
– 菜单:View -> Reset Layout
Part02-生产环境规划与建议
2.1 数据库设计与管理
使用MySQL Workbench进行数据库设计与管理是DBA的日常工作之一:
1. 创建数据库
方式1:使用SQL命令
CREATE DATABASE production_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
方式2:使用图形界面
步骤:
1. 右键点击Schemas -> Create Schema
2. 输入数据库名称:production_db
3. 选择字符集:utf8mb4
4. 选择排序规则:utf8mb4_unicode_ci
5. 点击Apply
输出示例:
CREATE SCHEMA `production_db` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
Execute: OK
Time: 0.012s
2. 创建表
方式1:使用SQL命令
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT ‘用户名’,
age INT COMMENT ‘年龄’,
email VARCHAR(255) COMMENT ‘邮箱’,
phone VARCHAR(20) COMMENT ‘电话’,
status TINYINT DEFAULT 1 COMMENT ‘状态:1-正常,0-禁用’,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
INDEX idx_name (name),
INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’用户表’;
方式2:使用表编辑器
步骤:
1. 右键点击Tables -> Create Table
2. 输入表名:users
3. 添加列:
– id: INT, PK, NN, AI
– name: VARCHAR(255), NN
– age: INT
– email: VARCHAR(255)
4. 设置索引
5. 设置表选项
6. 点击Apply
输出示例:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL COMMENT ‘用户名’,
`age` INT NULL COMMENT ‘年龄’,
`email` VARCHAR(255) NULL COMMENT ‘邮箱’,
PRIMARY KEY (`id`),
INDEX `idx_name` (`name`),
INDEX `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’用户表’;
3. 修改表结构
添加列:
ALTER TABLE users ADD COLUMN address VARCHAR(500) COMMENT ‘地址’ AFTER email;
输出示例:
ALTER TABLE `production_db`.`users`
ADD COLUMN `address` VARCHAR(500) NULL COMMENT ‘地址’ AFTER `email`;
Execute: OK
Time: 0.023s
修改列:
ALTER TABLE users MODIFY COLUMN name VARCHAR(500) NOT NULL COMMENT ‘用户名’;
输出示例:
ALTER TABLE `production_db`.`users`
CHANGE COLUMN `name` `name` VARCHAR(500) NOT NULL COMMENT ‘用户名’;
Execute: OK
Time: 0.015s
删除列:
ALTER TABLE users DROP COLUMN address;
输出示例:
ALTER TABLE `production_db`.`users`
DROP COLUMN `address`;
Execute: OK
Time: 0.018s
4. 创建索引
创建普通索引:
CREATE INDEX idx_phone ON users(phone);
输出示例:
CREATE INDEX `idx_phone` ON `production_db`.`users` (`phone`);
Execute: OK
Time: 0.034s
创建复合索引:
CREATE INDEX idx_name_email ON users(name, email);
输出示例:
CREATE INDEX `idx_name_email` ON `production_db`.`users` (`name`, `email`);
Execute: OK
Time: 0.045s
创建唯一索引:
CREATE UNIQUE INDEX uk_email ON users(email);
输出示例:
CREATE UNIQUE INDEX `uk_email` ON `production_db`.`users` (`email`);
Execute: OK
Time: 0.056s
5. 创建外键
添加外键约束:
ALTER TABLE orders
ADD CONSTRAINT fk_user_id
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE RESTRICT
ON UPDATE CASCADE;
输出示例:
ALTER TABLE `production_db`.`orders`
ADD CONSTRAINT `fk_user_id`
FOREIGN KEY (`user_id`)
REFERENCES `production_db`.`users` (`id`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
Execute: OK
Time: 0.067s
6. 创建视图
创建视图:
CREATE VIEW user_orders_view AS
SELECT
u.id AS user_id,
u.name AS user_name,
COUNT(o.id) AS order_count,
SUM(o.total_amount) AS total_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;
输出示例:
CREATE OR REPLACE VIEW `user_orders_view` AS
SELECT
u.id AS user_id,
u.name AS user_name,
COUNT(o.id) AS order_count,
SUM(o.total_amount) AS total_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;
Execute: OK
Time: 0.012s
7. 创建存储过程
创建存储过程:
DELIMITER //
CREATE PROCEDURE get_user_orders(IN p_user_id INT)
BEGIN
SELECT
o.id AS order_id,
o.order_date,
o.total_amount,
o.status
FROM orders o
WHERE o.user_id = p_user_id
ORDER BY o.order_date DESC;
END //
DELIMITER ;
输出示例:
CREATE PROCEDURE `get_user_orders` (IN p_user_id INT)
BEGIN
SELECT
o.id AS order_id,
o.order_date,
o.total_amount,
o.status
FROM orders o
WHERE o.user_id = p_user_id
ORDER BY o.order_date DESC;
END;
Execute: OK
Time: 0.015s
8. 创建触发器
创建触发器:
DELIMITER //
CREATE TRIGGER before_user_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
IF NEW.email IS NOT NULL THEN
SET NEW.email = LOWER(NEW.email);
END IF;
END //
DELIMITER ;
输出示例:
CREATE TRIGGER `before_user_insert`
BEFORE INSERT ON `users`
FOR EACH ROW
BEGIN
IF NEW.email IS NOT NULL THEN
SET NEW.email = LOWER(NEW.email);
END IF;
END;
Execute: OK
Time: 0.018s
2.2 SQL开发与调试
MySQL Workbench提供了强大的SQL开发和调试功能:
1. SQL编辑器使用
打开SQL编辑器:
– 双击连接
– 菜单:Database -> Connect to Database
– 快捷键:Ctrl+U
编写SQL:
SELECT
u.id,
u.name,
u.email,
COUNT(o.id) AS order_count,
SUM(o.total_amount) AS total_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.status = 1
GROUP BY u.id, u.name, u.email
HAVING total_amount > 1000
ORDER BY total_amount DESC
LIMIT 10;
2. 执行SQL
执行当前语句:
– 点击闪电图标
– 快捷键:Ctrl+Enter
执行所有语句:
– 点击闪电图标(全部)
– 快捷键:Ctrl+Shift+Enter
输出示例:
10 rows returned in 0.023s
+—-+——–+——————-+————-+————–+
| id | name | email | order_count | total_amount |
+—-+——–+——————-+————-+————–+
| 1 | 张三 | zhangsan@test.com | 15 | 15000.00 |
| 2 | 李四 | lisi@test.com | 12 | 12000.00 |
| 3 | 王五 | wangwu@test.com | 10 | 10000.00 |
+—-+——–+——————-+————-+————–+
3. 查看执行计划
方式1:使用EXPLAIN
EXPLAIN SELECT * FROM users WHERE name = ‘张三’;
输出示例:
+—-+————-+——-+————+——+—————+———-+———+——-+——+———-+——-+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered |
Extra |
+—-+————-+——-+————+——+—————+———-+———+——-+——+———-+——-+
| 1 | SIMPLE | users | NULL | ref | idx_name | idx_name | 1022 | const | 1 | 100.00 | NULL |
+—-+————-+——-+————+——+—————+———-+———+——-+——+———-+——-+
方式2:使用可视化执行计划
– 点击 “Execution Plan” 按钮
– 查看图形化执行计划
4. SQL格式化
格式化SQL:
– 菜单:Query -> Reformat SQL
– 快捷键:Ctrl+B
格式化前:
SELECT id,name,email FROM users WHERE status=1 ORDER BY id;
格式化后:
SELECT
id,
name,
email
FROM
users
WHERE
status = 1
ORDER BY
id;
5. SQL自动补全
启用自动补全:
– 菜单:Edit -> Preferences -> SQL Editor
– 勾选 “Enable Code Completion”
使用自动补全:
– 输入部分关键字
– 按 Ctrl+Space 或 Tab
– 选择补全项
示例:
SEL
FROM
WHE
users.
6. SQL调试
设置断点:
– 在SQL编辑器中点击行号左侧
– 或右键选择 “Toggle Breakpoint”
调试控制:
– Step Over: F10
– Step Into: F11
– Continue: F5
– Stop: Shift+F5
查看变量:
– 在调试面板查看变量值
– 查看调用堆栈
7. SQL模板使用
使用模板:
– 菜单:Query -> Use Template
– 选择模板类型
常用模板:
– CREATE TABLE
– CREATE INDEX
– CREATE PROCEDURE
– INSERT INTO
– UPDATE
8. SQL脚本管理
保存脚本:
– 菜单:File -> Save SQL Script
– 快捷键:Ctrl+S
– 文件格式:.sql
打开脚本:
– 菜单:File -> Open SQL Script
– 快捷键:Ctrl+O
执行脚本:
– 菜单:Query -> Execute SQL Script
– 或直接打开后执行
9. 查询结果操作
导出结果:
– 右键点击结果 -> Export
– 选择格式:CSV, JSON, HTML, XML
编辑结果:
– 点击单元格直接编辑
– 编辑后点击 Apply
复制结果:
– 选择行 -> Ctrl+C
– 粘贴到Excel等
筛选结果:
– 使用结果区的筛选功能
– 输入筛选条件
10. SQL历史管理
查看历史:
– 菜单:Query -> Query History
– 快捷键:Ctrl+H
使用历史:
– 双击历史项加载SQL
– 可以搜索历史记录
清除历史:
– 菜单:Query -> Clear History
2.3 用户权限管理
MySQL Workbench提供了图形化的用户权限管理功能:
1. 打开用户管理
方式:
– 菜单:Server -> Users and Privileges
– 侧边栏:Management -> Users and Privileges
2. 创建用户
步骤:
1. 点击 “Add Account” 按钮
2. 填写用户信息:
– Login Name: app_user
– Authentication Type: Standard
– Limit to Hosts Matching: %
– Password: ********
– Confirm Password: ********
3. 点击 “Apply”
生成的SQL:
CREATE USER ‘app_user’@’%’ IDENTIFIED BY ‘********’;
输出示例:
User ‘app_user’@’%’ created successfully.
3. 设置用户权限
全局权限:
步骤:
1. 选择用户
2. 切换到 “Administrative Roles” 标签
3. 选择角色:
– DBA: 数据库管理员
– MaintenanceAdmin: 维护管理员
– UserAdmin: 用户管理员
– SecurityAdmin: 安全管理员
– MonitorAdmin: 监控管理员
数据库权限:
步骤:
1. 选择用户
2. 切换到 “Schema Privileges” 标签
3. 点击 “Add Entry”
4. 选择数据库
5. 勾选权限:
– SELECT: 查询
– INSERT: 插入
– UPDATE: 更新
– DELETE: 删除
– CREATE: 创建
– DROP: 删除
– ALTER: 修改
– INDEX: 索引
– EXECUTE: 执行存储过程
生成的SQL:
GRANT SELECT, INSERT, UPDATE, DELETE ON production_db.* TO ‘app_user’@’%’;
输出示例:
Privileges granted to ‘app_user’@’%’ on ‘production_db’.
4. 修改用户密码
步骤:
1. 选择用户
2. 在 “Login” 标签中点击 “Change Password”
3. 输入新密码
4. 点击 “Apply”
生成的SQL:
ALTER USER ‘app_user’@’%’ IDENTIFIED BY ‘********’;
输出示例:
Password changed for user ‘app_user’@’%’.
5. 删除用户
步骤:
1. 选择用户
2. 点击 “Delete” 按钮
3. 确认删除
生成的SQL:
DROP USER ‘app_user’@’%’;
输出示例:
User ‘app_user’@’%’ deleted successfully.
6. 查看用户权限
方式1:图形界面
– 选择用户 -> Schema Privileges
– 查看已授予的权限
方式2:SQL查询
SHOW GRANTS FOR ‘app_user’@’%’;
输出示例:
+————————————————–+
| Grants for app_user@% |
+————————————————–+
| GRANT USAGE ON *.* TO `app_user`@`%` |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `production_db`.* TO `app_user`@`%` |
+————————————————–+
7. 撤销权限
步骤:
1. 选择用户
2. 切换到 “Schema Privileges” 标签
3. 选择要撤销的权限
4. 点击 “Revoke”
生成的SQL:
REVOKE DELETE ON production_db.* FROM ‘app_user’@’%’;
输出示例:
Privilege revoked from ‘app_user’@’%’ on ‘production_db’.
8. 用户账户限制
设置资源限制:
步骤:
1. 选择用户
2. 切换到 “Account Limits” 标签
3. 设置限制:
– Max Queries per Hour: 1000
– Max Updates per Hour: 500
– Max Connections per Hour: 100
– Max User Connections: 10
生成的SQL:
ALTER USER ‘app_user’@’%’
WITH MAX_QUERIES_PER_HOUR 1000
MAX_UPDATES_PER_HOUR 500
MAX_CONNECTIONS_PER_HOUR 100
MAX_USER_CONNECTIONS 10;
输出示例:
Account limits set for ‘app_user’@’%’.
9. 用户锁定/解锁
锁定用户:
步骤:
1. 选择用户
2. 在 “Login” 标签中勾选 “Account Locked”
3. 点击 “Apply”
生成的SQL:
ALTER USER ‘app_user’@’%’ ACCOUNT LOCK;
解锁用户:
ALTER USER ‘app_user’@’%’ ACCOUNT UNLOCK;
输出示例:
Account locked for ‘app_user’@’%’.
Account unlocked for ‘app_user’@’%’.
10. 密码过期策略
设置密码过期:
步骤:
1. 选择用户
2. 在 “Login” 标签中设置密码策略:
– Password Expired: 立即过期
– Password Expire Never: 永不过期
– Password Expire Default: 使用默认策略
– Password Expire Interval: 指定天数
生成的SQL:
ALTER USER ‘app_user’@’%’ PASSWORD EXPIRE INTERVAL 90 DAY;
输出示例:
Password expiration set for ‘app_user’@’%’.
Part03-生产环境项目实施方案
3.1 表结构管理实战
以下是使用MySQL Workbench进行表结构管理的实战案例:
# 案例1:创建用户表
# 步骤1:打开表编辑器
# 右键点击Tables -> Create Table
# 步骤2:配置表结构
Table Name: users
Columns:
| Column Name | Data Type | PK | NN | UQ | AI | Default | Comment |
|————-|—————|—-|—-|—-|—-|———|————|
| id | INT | Y | Y | | Y | | 用户ID |
| username | VARCHAR(50) | | Y | Y | | | 用户名 |
| password | VARCHAR(255) | | Y | | | | 密码 |
| email | VARCHAR(100) | | | Y | | | 邮箱 |
| phone | VARCHAR(20) | | | | | | 电话 |
| real_name | VARCHAR(50) | | | | | | 真实姓名 |
| age | INT | | | | | | 年龄 |
| gender | TINYINT | | | | | 0 | 性别 |
| status | TINYINT | | Y | | | 1 | 状态 |
| created_at | TIMESTAMP | | | | | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | | | | | CURRENT_TIMESTAMP | 更新时间 |
Indexes:
| Index Name | Index Type | Columns |
|————-|————|————|
| PRIMARY | PRIMARY | id |
| uk_username | UNIQUE | username |
| uk_email | UNIQUE | email |
| idx_phone | INDEX | phone |
| idx_status | INDEX | status |
Foreign Keys: (无)
Table Options:
– Engine: InnoDB
– Character Set: utf8mb4
– Collation: utf8mb4_unicode_ci
– Comment: 用户表
# 步骤3:生成SQL
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT ‘用户ID’,
`username` VARCHAR(50) NOT NULL COMMENT ‘用户名’,
`password` VARCHAR(255) NOT NULL COMMENT ‘密码’,
`email` VARCHAR(100) NULL COMMENT ‘邮箱’,
`phone` VARCHAR(20) NULL COMMENT ‘电话’,
`real_name` VARCHAR(50) NULL COMMENT ‘真实姓名’,
`age` INT NULL COMMENT ‘年龄’,
`gender` TINYINT NULL DEFAULT 0 COMMENT ‘性别’,
`status` TINYINT NOT NULL DEFAULT 1 COMMENT ‘状态’,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_username` (`username`),
UNIQUE INDEX `uk_email` (`email`),
INDEX `idx_phone` (`phone`),
INDEX `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’用户表’;
# 步骤4:执行创建
# 点击Apply执行
# 输出示例:
# Table `users` created successfully.
# Time: 0.045s
# 案例2:修改表结构
# 需求:添加用户头像字段
# 步骤1:打开表编辑器
# 右键点击users表 -> Alter Table
# 步骤2:添加列
# 在Columns区域点击添加按钮
Column Name: avatar
Data Type: VARCHAR(255)
Comment: 头像URL
位置: 在email之后
# 步骤3:生成SQL
ALTER TABLE `users`
ADD COLUMN `avatar` VARCHAR(255) NULL COMMENT ‘头像URL’ AFTER `email`;
# 步骤4:执行修改
# 点击Apply执行
# 输出示例:
# Table `users` altered successfully.
# Time: 0.034s
# 案例3:创建订单表
# 步骤1:创建订单表
Table Name: orders
Columns:
| Column Name | Data Type | PK | NN | UQ | AI | Default | Comment |
|—————|—————|—-|—-|—-|—-|———|————–|
| id | BIGINT | Y | Y | | Y | | 订单ID |
| order_no | VARCHAR(50) | | Y | Y | | | 订单号 |
| user_id | INT | | Y | | | | 用户ID |
| total_amount | DECIMAL(10,2) | | Y | | | 0.00 | 总金额 |
| status | TINYINT | | Y | | | 0 | 订单状态 |
| payment_time | DATETIME | | | | | | 支付时间 |
| created_at | TIMESTAMP | | | | | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | | | | | CURRENT_TIMESTAMP | 更新时间 |
Indexes:
| Index Name | Index Type | Columns |
|————–|————|————|
| PRIMARY | PRIMARY | id |
| uk_order_no | UNIQUE | order_no |
| idx_user_id | INDEX | user_id |
| idx_status | INDEX | status |
| idx_created | INDEX | created_at |
Foreign Keys:
| FK Name | Columns | Referenced Table | Referenced Columns | On Delete | On Update |
|————–|———-|——————|——————-|———–|———–|
| fk_user_id | user_id | users | id | RESTRICT | CASCADE |
# 步骤2:生成SQL
CREATE TABLE `orders` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT ‘订单ID’,
`order_no` VARCHAR(50) NOT NULL COMMENT ‘订单号’,
`user_id` INT NOT NULL COMMENT ‘用户ID’,
`total_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT ‘总金额’,
`status` TINYINT NOT NULL DEFAULT 0 COMMENT ‘订单状态’,
`payment_time` DATETIME NULL COMMENT ‘支付时间’,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_order_no` (`order_no`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_status` (`status`),
INDEX `idx_created` (`created_at`),
CONSTRAINT `fk_user_id`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
ON DELETE RESTRICT
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’订单表’;
# 步骤3:执行创建
# 输出示例:
# Table `orders` created successfully.
# Time: 0.056s
# 案例4:使用表检查器
# 步骤1:打开表检查器
# 右键点击表 -> Table Inspector
# 步骤2:查看表信息
Info标签:
– Table Name: users
– Engine: InnoDB
– Row Format: Dynamic
– Rows: 10000
– Avg Row Length: 123
– Data Length: 1.23 MB
– Index Length: 512 KB
– Auto Increment: 10001
– Create Time: 2026-04-01 12:00:00
– Update Time: 2026-04-01 14:30:00
– Check Time: NULL
– Collation: utf8mb4_unicode_ci
– Comment: 用户表
Columns标签:
– 显示所有列信息
– 列类型、默认值、注释等
Indexes标签:
– 显示所有索引信息
– 索引类型、列、基数等
Foreign Keys标签:
– 显示外键关系
Triggers标签:
– 显示触发器
Partitioning标签:
– 显示分区信息
3.2 数据管理实战
以下是使用MySQL Workbench进行数据管理的实战案例:
# 案例1:查询数据
# 步骤1:打开数据查询
# 右键点击表 -> Select Rows – Limit 1000
# 步骤2:查看数据
# 自动生成查询SQL
SELECT * FROM production_db.users LIMIT 0, 1000;
# 输出示例:
# 1000 rows returned in 0.023s
# 步骤3:自定义查询
# 在SQL编辑器中编写查询
SELECT
u.id,
u.username,
u.email,
u.real_name,
u.status,
COUNT(o.id) AS order_count,
COALESCE(SUM(o.total_amount), 0) AS total_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.status = 1
GROUP BY u.id, u.username, u.email, u.real_name, u.status
ORDER BY total_amount DESC
LIMIT 20;
# 输出示例:
# 20 rows returned in 0.156s
# 案例2:编辑数据
# 方式1:直接编辑结果集
# 步骤:
# 1. 执行查询
# 2. 点击结果单元格
# 3. 直接编辑值
# 4. 点击Apply
# 生成的SQL:
UPDATE `production_db`.`users`
SET `real_name` = ‘张三丰’
WHERE `id` = 1;
# 输出示例:
# 1 row(s) affected.
# Time: 0.012s
# 方式2:使用编辑器
# 步骤:
# 1. 右键点击表 -> Edit Table Data
# 2. 编辑数据
# 3. 点击Apply
# 案例3:插入数据
# 方式1:使用结果集
# 步骤:
# 1. 执行查询
# 2. 点击结果区的”Insert”按钮
# 3. 填写新行数据
# 4. 点击Apply
# 生成的SQL:
INSERT INTO `production_db`.`users`
(`username`, `password`, `email`, `real_name`, `status`)
VALUES
(‘zhangsan’, ‘encrypted_password’, ‘zhangsan@test.com’, ‘张三’, 1);
# 输出示例:
# 1 row(s) inserted.
# Time: 0.015s
# 方式2:使用SQL
INSERT INTO users (username, password, email, real_name, age, gender, status)
VALUES
(‘lisi’, ‘encrypted_password’, ‘lisi@test.com’, ‘李四’, 30, 1, 1),
(‘wangwu’, ‘encrypted_password’, ‘wangwu@test.com’, ‘王五’, 28, 1, 1);
# 输出示例:
# 2 row(s) inserted.
# Time: 0.018s
# 案例4:批量更新数据
# 需求:将所有状态为0的用户状态更新为1
# 步骤1:编写更新SQL
UPDATE users
SET status = 1
WHERE status = 0;
# 步骤2:执行更新
# 点击Execute
# 输出示例:
# 50 row(s) affected.
# Time: 0.045s
# 步骤3:验证更新
SELECT COUNT(*) AS count FROM users WHERE status = 0;
# 输出示例:
# +——-+
# | count |
# +——-+
# | 0 |
# +——-+
# 案例5:删除数据
# 方式1:使用结果集
# 步骤:
# 1. 执行查询
# 2. 选择要删除的行
# 3. 点击”Delete”按钮
# 4. 点击Apply
# 生成的SQL:
DELETE FROM `production_db`.`users` WHERE `id` = 100;
# 输出示例:
# 1 row(s) deleted.
# Time: 0.012s
# 方式2:使用SQL
DELETE FROM users WHERE status = 0;
# 输出示例:
# 0 row(s) deleted.
# Time: 0.008s
# 案例6:数据导出
# 步骤1:打开数据导出
# 菜单:Server -> Data Export
# 步骤2:选择导出对象
Databases to Export:
[x] production_db
Tables:
production_db:
[x] users
[x] orders
# 步骤3:配置导出选项
Export Options:
– Export to Self-Contained File
– File Path: /backup/production_db_20260401.sql
– Include Create Schema: Yes
– Include Create Table: Yes
– Include Data: Yes
Advanced Options:
– Max Query Size: 1M
– Use Column Names in INSERT: Yes
# 步骤4:执行导出
# 点击Start Export
# 输出示例:
# Exporting data…
#
# Dumping database: production_db
# Dumping table: users (10000 rows)
# Dumping table: orders (50000 rows)
#
# Writing to file: /backup/production_db_20260401.sql
#
# Export completed successfully.
# Total size: 15.6 MB
# 案例7:数据导入
# 步骤1:打开数据导入
# 菜单:Server -> Data Import
# 步骤2:选择导入文件
Import from Self-Contained File: /backup/production_db_20260401.sql
# 步骤3:配置导入选项
Import Options:
– Create database if not exists: Yes
– Drop tables before import: Yes
# 步骤4:执行导入
# 点击Start Import
# 输出示例:
# Importing data…
#
# Creating database: production_db
# Creating table: users
# Importing data: 10000 rows
# Creating table: orders
# Importing data: 50000 rows
#
# Import completed successfully.
# Total time: 45.6 seconds
# 案例8:数据迁移
# 需求:将测试环境数据迁移到生产环境
# 步骤1:打开迁移向导
# 菜单:Database -> Migration Wizard
# 步骤2:配置源数据库
Source Database:
Database System: MySQL
Hostname: test-server.example.com
Port: 3306
Username: root
Password: ********
# 步骤3:配置目标数据库
Target Database:
Database System: MySQL
Hostname: prod-server.example.com
Port: 3306
Username: root
Password: ********
# 步骤4:选择迁移对象
Objects to Migrate:
[x] testdb -> production_db
[x] All Tables
[x] All Views
[x] All Stored Procedures
# 步骤5:执行迁移
# 点击Run Migration
# 输出示例:
# Migration started at 2026-04-01 12:00:00
#
# Connecting to source database…
# Connection successful
#
# Connecting to target database…
# Connection successful
#
# Migrating schema…
# Migrating data…
#
# Migration completed successfully.
# Total time: 5 minutes 30 seconds
3.3 索引管理实战
以下是使用MySQL Workbench进行索引管理的实战案例:
# 案例1:创建索引
# 需求:为users表的phone字段创建索引
# 方式1:使用SQL
CREATE INDEX idx_phone ON users(phone);
# 输出示例:
# Index created successfully.
# Time: 0.034s
# 方式2:使用表编辑器
# 步骤:
# 1. 右键点击表 -> Alter Table
# 2. 切换到Indexes标签
# 3. 点击添加索引
# 4. 配置索引:
# – Index Name: idx_phone
# – Index Type: INDEX
# – Columns: phone
# 5. 点击Apply
# 案例2:创建复合索引
# 需求:为orders表的user_id和status字段创建复合索引
# 方式1:使用SQL
CREATE INDEX idx_user_status ON orders(user_id, status);
# 输出示例:
# Index created successfully.
# Time: 0.056s
# 方式2:使用表编辑器
# 步骤:
# 1. 右键点击表 -> Alter Table
# 2. 切换到Indexes标签
# 3. 添加复合索引:
# – Index Name: idx_user_status
# – Index Type: INDEX
# – Columns: user_id, status (按顺序添加)
# 4. 点击Apply
# 案例3:创建唯一索引
# 需求:为users表的email字段创建唯一索引
# 方式1:使用SQL
CREATE UNIQUE INDEX uk_email ON users(email);
# 输出示例:
# Index created successfully.
# Time: 0.045s
# 方式2:使用表编辑器
# 步骤:
# 1. 右键点击表 -> Alter Table
# 2. 切换到Indexes标签
# 3. 添加唯一索引:
# – Index Name: uk_email
# – Index Type: UNIQUE
# – Columns: email
# 4. 点击Apply
# 案例4:创建全文索引
# 需求:为products表的description字段创建全文索引
# 方式1:使用SQL
CREATE FULLTEXT INDEX ft_description ON products(description);
# 输出示例:
# Index created successfully.
# Time: 0.078s
# 方式2:使用表编辑器
# 步骤:
# 1. 右键点击表 -> Alter Table
# 2. 切换到Indexes标签
# 3. 添加全文索引:
# – Index Name: ft_description
# – Index Type: FULLTEXT
# – Columns: description
# 4. 点击Apply
# 案例5:删除索引
# 需求:删除users表的idx_phone索引
# 方式1:使用SQL
DROP INDEX idx_phone ON users;
# 输出示例:
# Index dropped successfully.
# Time: 0.023s
# 方式2:使用表编辑器
# 步骤:
# 1. 右键点击表 -> Alter Table
# 2. 切换到Indexes标签
# 3. 选择要删除的索引
# 4. 点击删除按钮
# 5. 点击Apply
# 案例6:查看索引信息
# 方式1:使用SQL
SHOW INDEX FROM users;
# 输出示例:
#
+——-+————+————+————–+————-+———–+————-+———-+——–+——+————+———+—————+
# | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed
| Null | Index_type | Comment | Index_comment |
#
+——-+————+————+————–+————-+———–+————-+———-+——–+——+————+———+—————+
# | users | 0 | PRIMARY | 1 | id | A | 10000 | NULL | NULL | | BTREE | | |
# | users | 0 | uk_username| 1 | username | A | 10000 | NULL | NULL | | BTREE | | |
# | users | 0 | uk_email | 1 | email | A | 10000 | NULL | NULL | YES | BTREE | | |
# | users | 1 | idx_status | 1 | status | A | 2 | NULL | NULL | | BTREE | | |
#
+——-+————+————+————–+————-+———–+————-+———-+——–+——+————+———+—————+
# 方式2:使用表检查器
# 步骤:
# 1. 右键点击表 -> Table Inspector
# 2. 切换到Indexes标签
# 3. 查看索引详细信息
# 案例7:分析索引使用情况
# 步骤1:查看索引统计
SELECT
TABLE_NAME,
INDEX_NAME,
CARDINALITY,
SEQ_IN_INDEX,
COLUMN_NAME
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = ‘production_db’
ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX;
# 输出示例:
# +————+————+————-+————–+————-+
# | TABLE_NAME | INDEX_NAME | CARDINALITY | SEQ_IN_INDEX | COLUMN_NAME |
# +————+————+————-+————–+————-+
# | orders | PRIMARY | 50000 | 1 | id |
# | orders | idx_status | 5 | 1 | status |
# | orders | idx_user_id| 5000 | 1 | user_id |
# | users | PRIMARY | 10000 | 1 | id |
# | users | idx_status | 2 | 1 | status |
# +————+————+————-+————–+————-+
# 步骤2:查看未使用的索引
SELECT
OBJECT_SCHEMA,
OBJECT_NAME,
INDEX_NAME
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE INDEX_NAME IS NOT NULL
AND COUNT_STAR = 0
AND OBJECT_SCHEMA = ‘production_db’
ORDER BY OBJECT_SCHEMA, OBJECT_NAME;
# 输出示例:
# +—————+————-+————+
# | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME |
# +—————+————-+————+
# | production_db | users | idx_phone |
# +—————+————-+————+
# 案例8:优化索引
# 需求:根据查询优化索引
# 步骤1:分析慢查询
SELECT * FROM orders WHERE user_id = 100 AND status = 1;
# 步骤2:查看执行计划
EXPLAIN SELECT * FROM orders WHERE user_id = 1
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
