- 关于 TiDB
- 主要概念
- 操作指南
- 快速上手
- 部署
- 配置
- 安全
- 安全传输层协议 (TLS)
- 生成自签名证书
- 监控
- 迁移
- 运维
- Ansible 常见运维操作
- 备份与恢复
- 定位异常查询
- 扩容缩容
- 升级
- 故障诊断
- 参考手册
- SQL
- 与 MySQL 兼容性对比
- SQL 语言结构
- 表属性和列属性
- 数据类型
- 函数与操作符
- SQL 语句
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ALTER DATABASE
ALTER INSTANCE
ALTER TABLE
ALTER USER
ANALYZE TABLE
BEGIN
CHANGE COLUMN
COMMIT
CREATE DATABASE
CREATE INDEX
CREATE ROLE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP ROLE
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEXES [FROM|IN]
SHOW INDEX [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW SCHEMAS
SHOW STATUS
SHOW [FULL] TABLES
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SPLIT REGION
START TRANSACTION
TRACE
TRUNCATE
UPDATE
USE
- 约束
- 生成列
- 分区表
- 字符集
- SQL 模式
- 视图
- 配置
- tidb-server
- pd-server
- tikv-server
- 安全
- 事务
- 系统数据库
- 错误码
- 支持的连接器和 API
- 垃圾回收 (GC)
- 性能调优
- 监控指标
- 报警规则
- 最佳实践
- TiSpark 使用指南
- TiKV
- TiFlash
- TiDB Binlog
- 工具
- TiDB in Kubernetes
- 常见问题 (FAQ)
- 技术支持
- 贡献
- 版本发布历史
- 发布版本汇总
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 术语表
你正在查看 TiDB 数据库的较旧版本 (TiDB v3.1) 的文档。
系统变量
MySQL 系统变量 (System Variables) 是一些系统参数,用于调整数据库运行时的行为,根据变量的作用范围分为全局范围有效(Global Scope)以及会话级别有效(Session Scope)。TiDB 支持 MySQL5.7 的所有系统变量,大部分变量仅仅是为了兼容性而支持,不会影响运行时行为。
设置系统变量
通过 SET
语句 可以修改系统变量的值。进行修改时,还要考虑变量可修改的范围,不是所有的变量都能在全局/会话范围内进行修改。具体的可修改范围参考 MySQL 动态变量文档。
全局范围值
在变量名前加
GLOBAL
关键词或者是使用@@global.
作为修饰符:SET GLOBAL autocommit = 1;
SET @@global.autocommit = 1;
在分布式 TiDB 中,GLOBAL
变量的设置会持久化到存储层中,单个 TiDB 实例每 2 秒会主动进行一次全变量的获取并形成 gvc
(global variables cache) 缓存,该缓存有效时间最多可持续 2 秒。在设置 GLOBAL
变量之后,为了保证新会话的有效性,请确保两个操作之间的间隔大于 2 秒。相关细节可以查看 Issue #14531。
会话范围值
在变量名前加
SESSION
关键词或者是使用@@session.
作为修饰符,或者是不加任何修饰符:SET SESSION autocommit = 1;
SET @@session.autocommit = 1;
SET @@autocommit = 1;
LOCAL
以及@@local.
是SESSION
以及@@session.
的同义词
系统变量的作用机制
会话范围的系统变量仅仅会在创建会话时才会根据全局范围系统变量初始化自己的值。更改全局范围的系统变量不会改变已经创建的会话正在使用的系统变量的值。
SELECT @@GLOBAL.autocommit;
+---------------------+ | @@GLOBAL.autocommit | +---------------------+ | ON | +---------------------+ 1 row in set (0.00 sec)
SELECT @@SESSION.autocommit;
+----------------------+ | @@SESSION.autocommit | +----------------------+ | ON | +----------------------+ 1 row in set (0.00 sec)
SET GLOBAL autocommit = OFF;
Query OK, 0 rows affected (0.01 sec)
会话范围的系统变量不会改变,会话中执行的事务依旧是以自动提交的形式来进行:
SELECT @@SESSION.autocommit;
+----------------------+ | @@SESSION.autocommit | +----------------------+ | ON | +----------------------+ 1 row in set (0.00 sec)
SELECT @@GLOBAL.autocommit;
+---------------------+ | @@GLOBAL.autocommit | +---------------------+ | OFF | +---------------------+ 1 row in set (0.00 sec)
exit
Bye
mysql -h 127.0.0.1 -P 4000 -u root -D test
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.25-TiDB-None MySQL Community Server (Apache License 2.0) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
新建的会话会使用新的全局变量:
SELECT @@SESSION.autocommit;
+----------------------+ | @@SESSION.autocommit | +----------------------+ | OFF | +----------------------+ 1 row in set (0.00 sec)
TiDB 支持的 MySQL 系统变量
下列系统变量是 TiDB 真正支持并且行为和 MySQL 一致:
变量名 | 作用域 | 说明 |
---|---|---|
autocommit | GLOBAL | SESSION | 是否自动 Commit 事务 |
sql_mode | GLOBAL | SESSION | 支持部分 MySQL SQL mode, |
time_zone | GLOBAL | SESSION | 数据库所使用的时区 |
tx_isolation | GLOBAL | SESSION | 事务隔离级别 |
max_execution_time | GLOBAL | SESSION | 语句超时时间,单位为毫秒 |
innodb_lock_wait_timeout | GLOBAL | SESSION | 悲观事务语句等锁时间,单位为秒 |
interactive_timeout | SESSION | GLOBAL | 交互式用户会话的空闲超时,单位为秒 |
max_execution_time
目前对所有类型的 statement
生效,并非只对 SELECT
语句生效。实际精度在 100ms 级别,而非更准确的毫秒级别。
TiDB 特有的系统变量
参见 TiDB 专用系统变量。