数据库中两个变量分别代表什么含义?
- 内容介绍
- 文章标签
- 相关推荐
在数据库管理和开发过程中,“两个变量”往往是最让人头疼的概念之一。你可能会在日志里看到错误信息:Variable 'max_connections' is set to 0;不过,又或者在编写存储过程时发现变量未能正确传递,导致结果为空。
再看全局变量,一次定义。 处处可用
全局变量是在数据库服务器启动时创建,而且在整个服务器进程中共享的参数。再看例如,
- max_connections – 控制最大并发连接数。
- innodb_buffer_pool_size – InnoDB 缓冲池大小。
- log_error – 日志文件方法。
这些值可以通过SYSTEM VARIABLES命令查看,也可以在配置文件中设置。一旦设置,所有客户端都会受到影响。
常见痛点 & 方法
-
连接数不足:出现 “Too many connections” 时请检查
$max_connections,并根据硬件资源适当调高。 -
Mysql Buffer 小:若查询慢速。先确认
$innodb_buffer_pool_size,推荐占用物理内存 70% 左右。 -
Error Log 方法错误:确保
$log_error指向可写目录,否则 MySQL 启动失败。
从实例变量来看,每个数据库实例独有的数据字段
A database instance holds its own set of attributes such as:
- Name of database.
- Date created / last modified.
- User privileges.
为什么它们关键?
- 安全性提高:- 每个实例可以设置不同的访问权限,防止跨库泄漏。
- 性能调整:- 根据实例类型分配不同缓存策略。
- 监控与告警:- 实例级别指标更易于监控,例如连接数、查询延迟等。
User Variables 与 System Variables 的区别
User Variables
User variables 是会话级别、临时性的,可在 SQL 语句内部声明并使用。 例如的观点是,
@row_count = 0;不过,SELECT COUNT INTO @row_count FROM orders;
它们仅在当前会话存在一旦断开连接即失效;适合临时计算和脚本化任务。不过,
SYSTEM Variables
| Scope | Example Variable Name |
|---|---|
| Global | max_allowed_packet。innodb_flush_log_at_trx_commit |
修改全局程序变量后需要重新启动或执行 SYSTEM_VARIABLES = GLOBAL | SESSION;,而会话级别则不需重启,但只影响当前连接。
使用者痛点 & 常见误区
- 误把使用者变量当成程序变量来修改全局配置,引发“Unknown system variable”报错!
- 忘记将 session 变量改为 global 后仍然报错 “variable not found”,导致调试无果。
- 频繁修改程序变量而未记录版本差异,导致生产环境不可预期变更。
常见数据类型及其意义
- 整数型 :\t用于计数、ID 标识等。\t
\t \t
\t
2.\t浮点型 :\t用于测量值、价格等需要小数位。按理说,3.\t字符串型 :\t存储文字、描述信息。4.\t日期时间型 :\t记录时间戳。5.\t布尔型 或 BOOL ) :\t表示真/假。话说回来,
约束 & 数据完整性
- - 唯一性约束:'UNIQUE';防止重复行,从举例来看,使用者邮箱唯一。话说回来,
- - NOT NULL:不能为空字段。如主键列必须填值,
- - FOREIGN KEY:关联其他表,保证引用完整性。
- - CHECK : 验证数据范围,如年龄>=18。\lI> lI-- End constraint list --/ul/ lI-- End div --/div/ lI-- End div --/div/>
| 示例代码 | "
Answer in Chinese
在数据库管理和开发过程中,“两个变量”往往是最让人头疼的概念之一。你可能会在日志里看到错误信息:Variable 'max_connections' is set to 0;不过,又或者在编写存储过程时发现变量未能正确传递,导致结果为空。
再看全局变量,一次定义。 处处可用
全局变量是在数据库服务器启动时创建,而且在整个服务器进程中共享的参数。再看例如,
- max_connections – 控制最大并发连接数。
- innodb_buffer_pool_size – InnoDB 缓冲池大小。
- log_error – 日志文件方法。
这些值可以通过SYSTEM VARIABLES命令查看,也可以在配置文件中设置。一旦设置,所有客户端都会受到影响。
常见痛点 & 方法
-
连接数不足:出现 “Too many connections” 时请检查
$max_connections,并根据硬件资源适当调高。 -
Mysql Buffer 小:若查询慢速。先确认
$innodb_buffer_pool_size,推荐占用物理内存 70% 左右。 -
Error Log 方法错误:确保
$log_error指向可写目录,否则 MySQL 启动失败。
从实例变量来看,每个数据库实例独有的数据字段
A database instance holds its own set of attributes such as:
- Name of database.
- Date created / last modified.
- User privileges.
为什么它们关键?
- 安全性提高:- 每个实例可以设置不同的访问权限,防止跨库泄漏。
- 性能调整:- 根据实例类型分配不同缓存策略。
- 监控与告警:- 实例级别指标更易于监控,例如连接数、查询延迟等。
User Variables 与 System Variables 的区别
User Variables
User variables 是会话级别、临时性的,可在 SQL 语句内部声明并使用。 例如的观点是,
@row_count = 0;不过,SELECT COUNT INTO @row_count FROM orders;
它们仅在当前会话存在一旦断开连接即失效;适合临时计算和脚本化任务。不过,
SYSTEM Variables
| Scope | Example Variable Name |
|---|---|
| Global | max_allowed_packet。innodb_flush_log_at_trx_commit |
修改全局程序变量后需要重新启动或执行 SYSTEM_VARIABLES = GLOBAL | SESSION;,而会话级别则不需重启,但只影响当前连接。
使用者痛点 & 常见误区
- 误把使用者变量当成程序变量来修改全局配置,引发“Unknown system variable”报错!
- 忘记将 session 变量改为 global 后仍然报错 “variable not found”,导致调试无果。
- 频繁修改程序变量而未记录版本差异,导致生产环境不可预期变更。
常见数据类型及其意义
- 整数型 :\t用于计数、ID 标识等。\t
\t \t
\t
2.\t浮点型 :\t用于测量值、价格等需要小数位。按理说,3.\t字符串型 :\t存储文字、描述信息。4.\t日期时间型 :\t记录时间戳。5.\t布尔型 或 BOOL ) :\t表示真/假。话说回来,
约束 & 数据完整性
- - 唯一性约束:'UNIQUE';防止重复行,从举例来看,使用者邮箱唯一。话说回来,
- - NOT NULL:不能为空字段。如主键列必须填值,
- - FOREIGN KEY:关联其他表,保证引用完整性。
- - CHECK : 验证数据范围,如年龄>=18。\lI> lI-- End constraint list --/ul/ lI-- End div --/div/ lI-- End div --/div/>
| 示例代码 | "
Answer in Chinese

