您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# MySQL的操作规范指南是什么
## 目录
1. [前言](#前言)
2. [命名规范](#命名规范)
- [数据库命名](#数据库命名)
- [表命名](#表命名)
- [字段命名](#字段命名)
- [索引命名](#索引命名)
3. [表设计规范](#表设计规范)
- [字段类型选择](#字段类型选择)
- [主键设计](#主键设计)
- [字符集与排序规则](#字符集与排序规则)
4. [SQL编写规范](#sql编写规范)
- [查询优化](#查询优化)
- [事务处理](#事务处理)
- [分页查询](#分页查询)
5. [索引使用规范](#索引使用规范)
- [索引设计原则](#索引设计原则)
- [索引使用禁忌](#索引使用禁忌)
6. [安全规范](#安全规范)
- [权限管理](#权限管理)
- [SQL注入防范](#sql注入防范)
7. [高可用与备份](#高可用与备份)
- [主从复制配置](#主从复制配置)
- [备份策略](#备份策略)
8. [性能监控与优化](#性能监控与优化)
- [慢查询分析](#慢查询分析)
- [性能调优](#性能调优)
9. [附录](#附录)
- [常用命令速查](#常用命令速查)
- [版本兼容性说明](#版本兼容性说明)
---
## 前言
MySQL作为最流行的开源关系型数据库,广泛应用于各类业务场景。规范的数据库操作不仅能提升系统稳定性,还能显著优化性能。本文将从命名规范、表设计、SQL编写等8个维度详细说明MySQL操作规范。
---
## 命名规范
### 数据库命名
1. **全小写+下划线**:`order_db`(生产库)、`order_db_dev`(开发库)
2. **禁止特殊字符**:不使用`$`、`#`等符号
3. **业务前缀**:电商系统建议使用`ec_`前缀
### 表命名
```sql
-- 正例
CREATE TABLE user_account (
id BIGINT PRIMARY KEY
);
-- 反例(包含大写和特殊字符)
CREATE TABLE UserAccount (
uid BIGINT
);
字段类型 | 命名规范 | 示例 |
---|---|---|
布尔型 | is_前缀 | is_deleted |
时间型 | _time后缀 | create_time |
外键 | 关联表名_id | order_id |
数值类型:
BIGINT
(避免INT溢出)DECIMAL(20,4)
字符串类型:
CHAR(32)
(如MD5值)VARCHAR(255)
(需评估实际长度)-- 推荐自增主键
CREATE TABLE orders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_no VARCHAR(32) UNIQUE
);
-- 分布式系统建议雪花ID
ALTER TABLE orders MODIFY COLUMN id BIGINT UNSIGNED;
-- 正例:使用覆盖索引
SELECT user_id FROM user_account WHERE status = 1;
-- 反例:SELECT *
SELECT * FROM user_account WHERE status = 1;
// Java示例:事务超时设置
@Transactional(timeout = 30)
public void transferMoney() {
// 业务逻辑
}
组合索引:遵循最左匹配原则
-- (a,b,c)索引可优化以下查询
SELECT * FROM tbl WHERE a=1 AND b=2;
单表索引数:建议不超过5个
WHERE YEAR(create_time)=2023
WHERE user_id = '123'
(user_id为数值型时)-- 最小权限原则
GRANT SELECT, INSERT ON order_db.* TO 'app_user'@'192.168.%';
// PHP正确做法
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$user_id]);
# my.cnf配置示例
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
备份类型 | 频率 | 保留周期 |
---|---|---|
全量备份 | 每日 | 7天 |
增量备份 | 每小时 | 24小时 |
-- 开启慢查询日志
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
innodb_buffer_pool_size = 12G # 建议为内存的70%
innodb_flush_log_at_trx_commit = 2
# 查看连接数
mysql> SHOW STATUS LIKE 'Threads_connected';
# 导出表结构
mysqldump -d -u root -p database > schema.sql
特性 | 5.7支持 | 8.0变化 |
---|---|---|
JSON类型 | 部分 | 完整支持 |
窗口函数 | 不支持 | 支持 |
”`
(注:此为精简框架,完整6750字文档需补充各章节的详细说明、案例分析和性能对比数据。实际内容应包含更多技术细节和最佳实践。)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。