# 其他内容
# 系统数据库
对于MySQL来说,它自带的系统数据库共有以下4个。
- mysql
- performance_schema
- information_schema
- sys
# mysql 数据库
这是最重要的系统数据库之一,它包含了用户账户、权限、角色以及与安全相关的其他信息。
- 用户表 (
user
): 存储了所有用户的登录信息(如用户名、密码)和全局权限。 - 权限表 (
db
,tables_priv
,columns_priv
,procs_priv
): 分别存储数据库级、表级、列级和存储过程/函数级的权限设置。 - 其他表: 包括存储插件信息(
plugin
)、服务器端帮助文档(help_category
,help_topic
)等。
# information_schema
这是一个虚拟数据库,提供了访问数据库元数据的方法。它不存储实际的数据,而是通过视图的方式提供关于数据库对象的信息,比如表、列、索引等。
- Tables: 提供了有关数据库中所有表的信息。
- Columns: 列出了所有表中的列及其属性。
- Key_Column_Usage: 描述了键之间的关系,包括外键约束。
# performance_schema
用于监控MySQL服务器的性能,收集统计信息,帮助诊断性能瓶颈。从MySQL 5.5版本开始引入,需要手动启用相关功能。
- 包含了各种表,用于追踪服务器执行的语句、锁等待、文件I/O操作等。
# sys 数据库
sys
数据库是一个综合性的数据库,它简化了对performance_schema
中数据的访问,并提供了易于理解的报告。它在MySQL 5.7及更高版本中可用。
- 提供了一系列视图、存储过程和函数,使得性能调优和故障排除更加直观和简单。
注意
- 不要随意修改:除非你非常清楚自己在做什么,否则不应直接修改
mysql
,information_schema
,performance_schema
或sys
数据库中的内容。错误的修改可能会导致数据库无法正常工作。 - 备份重要数据:定期备份
mysql
数据库以防止意外丢失用户和权限数据。 - 使用专用工具进行管理:对于性能监控和故障排除,建议使用专门设计的工具或脚本,而不是直接操作
performance_schema
或sys
数据库。
# 分页查询
在MySQL
中,我们可以使用“limit m, n”
的语法来实现分页查询。
在MySQL中,分页查询通常用于从大量数据中提取特定范围的数据。这可以通过LIMIT
和OFFSET
子句来实现。
# 基本语法
分页查询的基本语法如下:
sql
浅色版本
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name
LIMIT offset, row_count;
1
2
3
4
5
2
3
4
5
或者更常用的形式是分开写LIMIT
和OFFSET
:
sql
浅色版本
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name
LIMIT row_count OFFSET offset;
1
2
3
4
5
2
3
4
5
offset
: 起始点,表示从第几条记录开始获取数据(注意:第一条记录的偏移量为0)。row_count
: 获取的记录数。
# 示例
假设我们有一个名为employees
的表,并希望以每页显示10条记录的方式查看数据。
# 第一页数据(第1到第10条记录)
SELECT * FROM employees
ORDER BY employee_id
LIMIT 10 OFFSET 0;
1
2
3
2
3
或简写为:
SELECT * FROM employees
ORDER BY employee_id
LIMIT 10;
1
2
3
2
3
# 第二页数据(第11到第20条记录)
SELECT * FROM employees
ORDER BY employee_id
LIMIT 10 OFFSET 10;
1
2
3
2
3
# 使用变量简化分页逻辑
如果你正在开发一个应用,可能需要动态地计算offset
值。可以使用编程语言中的循环或条件语句来计算它,比如在PHP中:
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 10; // 每页显示的记录数
$offset = ($page - 1) * $limit;
$query = "SELECT * FROM employees ORDER BY employee_id LIMIT $limit OFFSET $offset";
1
2
3
4
5
2
3
4
5
# 表的设计
补充一些常用的小技巧,这样可以让我们设计一个更好的表,主要包括以下5个方面:
- 对于一个表的主键来说,我们一般是使用自动递增的值,而不是手动插入值。
- 如果一个字段只有两种取值,比如“男”或“女”、“是”或“否”,比较好的做法是使用tinyint(1),而不是使用varchar等类型。当然,你使用varchar等类型也是没有问题的。
- 如果想要保存图片,我们一般不会将图片保存到数据库中,否则会占用大量的空间。一般是使用这样的做法:将图片上传到服务器,然后数据库保存的是图片的地址(URL)。
- 对于一篇文章来说,数据库一般保存的是包含该文章的HTML代码,也叫做“富文本”。一般我们会使用富文本编辑器编辑内容,然后获取对应的HTML代码,最后再将该HTML代码保存到数据库中。
- 设计表时,所有表和字段都应该添加对应的注释。这个好习惯一定要养成,这样可以使得后期维护起来更加轻松简单。