标题: SET 和 SHOW语法(一) [打印本页] 作者: sunhw0725 时间: 2008-2-29 15:05 标题: SET 和 SHOW语法(一) 14.5.3 SET 和 SHOW 语法
SET 可以用于设置各种变量或者选项。
SHOW 可以以各种形式描述数据库系统的信息,诸如数据表,字段,服务器状态等等。大致有以下这些方法:
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE 'pattern']
SHOW CREATE DATABASE db_name
SHOW CREATE TABLE tbl_name
SHOW DATABASES [LIKE 'pattern']
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW INNODB STATUS
SHOW [BDB] LOGS
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW STATUS [LIKE 'pattern']
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
SHOW [OPEN] TABLES [FROM db_name] [LIKE 'pattern']
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern']
SHOW WARNINGS [LIMIT [offset,] row_count]
如果 SHOW 语法中包括 LIKE 'pattern' 分句的话,'pattern' 是一个可以包括 SQL 语法中‘ % '和‘ _ '等通配符的字符串。这个模式语句对于取得相应的结果十分有用。
请注意,还有以下几种不同的标识方式:
SET PASSWOR 语句用于设定帐户的密码,详情请看“14.5.1.3 SET PASSWORD Syntax”。
SHOW 语句有以下几种方式用于描述复制主服务器和从服务器的信息:
SHOW BINLOG EVENTS
SHOW MASTER LOGS
SHOW MASTER STATUS
SHOW SLAVE HOSTS
SHOW SLAVE STATUS
这些格式的 SHOW 详细描述详情请看“14.6 Replication Statements”。
14.5.3.1 SET 语法
SET variable_assignment [, variable_assignment] ...
variable_assignment:
user_var_name = expr
| [GLOBAL | SESSION] system_var_name = expr
| @@[global. | session.]system_var_name = expr
SET 可以设置各种不同的变量类型,这些变量可以影响着服务器或者客户端的参数。它可以帮助你设置用户变量或者是系统变量。
在 MySQL 4.0.3 中,我们增加了 GLOBAL 和 SESSION 选项,并且可以在运行时动态修改系统中最重要的参数。这些可以被动态修改的系统参数详情请看“5.2.3.1 Dynamic System Variables”中会被详细描述到。
在老版本的 MySQL 中,SET 其实是 SET OPTION 的代替,它少了 OPTION 这个参数,不过现在不推荐的使用方法。
以下这个例子演示了几种使用设置变量的方法。
用户变量写成 @var_name,用以下方法来设置:
SET @var_name = expr;
用户变量的特性说明将在章节“10.3 User Variables”中提到。
系统变量在 SET 语法中可以以 var_name 的方式来引用。变量名前面用 GLOBAL 或 @@global. 来表示这是一个全局变量,用 SESSION , @@session. 或 @@ 来表示这是一个会话变量。 LOCAL 和 @@local. 其实 SESSION 和 @@session. 属同义。如果变量名前面没有附加的修饰词的话,那么 SET 只修改会话变量。
以 @@var_name这种格式来表示系统变量,在 MySQL 中是可以支持的,以兼容其它数据库系统。
如果你想在同一个语句中来修改多个系统变量,最后一次出现的 GLOBAL 或 SESSION 将作为该语句中没有修饰词的变量的默认选项。
SET sort_buffer_size=10000;
SET @@local.sort_buffer_size=10000;
SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
如果你设置了系统变量时用 SESSION (默认的) 选项,那么它的值将在会话结束前或者直到你改变它之前一直有效。如果设置系统变量是用 GLOBAL 选项,这必须要求你具备 SUPER (超级) 权限,它的值从新的连接开始到系统重启前一直有效。如果你想要一个变量永久生效的话,那么可以把它放到配置文件中。详情请看“4.3.2 Using Option Files”。
为了防止操作错误,例如如果你想用 SET GLOBAL 修改一个只能用 SET SESSION 来修改的变量,或者不是用 SET GLOBAL 的方式来修改一个全局变量时, MySQL 就会报告一个错误。
如果你想让一个 SESSION (会话) 变量的值设定成为一个 GLOBAL 变量的值,或者想让 GLOBAL 变量的值变成MySQL内嵌编译的默认值的话,你可以设置它为 DEFAULT (默认值) 。以下的这 2 个例子都是同样的设置会话变量 max_join_size 的值成为全局变量的值:
SET max_join_size=DEFAULT;
SET @@session.max_join_size=@@global.max_join_size;
你可以通过 SHOW VARIABLES 命令列出绝大部分的系统变量。详情请看“14.5.3.20 SHOW VARIABLES Syntax”的语法 。如果想要通过模式匹配的方式来获取变量列表的话,可以使用 LIKE 分句:
SHOW VARIABLES LIKE 'max_join_size';
SHOW GLOBAL VARIABLES LIKE 'max_join_size';
你还可以使用 SELECT @@[global.|local.]var_name 来取得指定变量的值:
SELECT @@max_join_size, @@global.max_join_size;
在通过 SELECT @@var_name ( 这样的话,就无需指定是 global 还是 session 抑或是 local 了 ) 来取得变量的值时, MySQL 会返回 SESSION 变量的值,如果它不存在,则返回 GLOBAL 变量的值。
以下所列的是那些非标准或者是在章节“5.2.3 Server System Variables”中找没有列出来的变量。尽管这些变量用 SHOW VARIABLES 并不显示出来,但你可以用 SELECT ( CHARACTER SET 和 SET NAMES 除外 ) 来取得它们的值。例如:
设置 autocommit (自动提交)模式。若设置为 1 ,则所有对数据表的操作都会立即生效。若设置为 0 ,则必须执行 COMMIT 以提交事务或者执行 ROLLBACK 取消事务。如果把 AUTOCOMMIT 由 0 改成 1 , MySQL 会自动提交任何一个开放的事务。开始一个事务的另一个方法可以是执行 START TRANSACTION 或 BEGIN 语句。详情请看“14.4.1 START TRANSACTION, COMMIT, and ROLLBACK Syntax”。
BIG_TABLES = {0 | 1}
如果被设置为 1,则所有的临时表将存放在磁盘里而非内存。这会使速度变得稍微慢了点,但是在执行 SELECT 操作时需要一个大临时表的情况下就不再会报告 The table tbl_name is full 错误了。对于新连接,它的默认值是 0(在内存中存放临时表) 。从 MySQL 4.0 起,你无需设置这个变量,因为 MySQL 会自动在需要的情况下将内存存储的表转换为硬盘存储的表。这个变量现在的名字是 SQL_BIG_TABLES 。
CHARACTER SET {charset_name | DEFAULT}
它用于将从客户端取得的以及发往客户端的字符串都映射成指定的字符串。在 MySQL 4.1 以前,唯一允许的字符集是 cp1251_koi8 ,不过你也可以通过修改 MySQL 发布的源代码中的 `sql/convert.cc' 文件来增加新的转换字符集。从 MySQL 4.1.1 开始,SET CHARACTER SET 将设置 3 个会话系统变量: character_set_client 和 character_set_results 会被设置成指定的字符集, character_set_connection 的值被设置成 character_set_database 的值。默认的转换字符集可以被重置为值 DEFAULT (默认值) 。请注意,SET CHARACTER SET 的语法和其它大多数设置选项的语法不一样。
IDENTITY = value
这个变量和变量 LAST_INSERT_ID 实际上是一样的。它的存在是为了与其它数据库系统兼容。从 MySQL 3.23.25 开始,可以通过执行 SELECT @@IDENTITY 来获得它的值。从 MySQL 4.0.3 开始,还可以执行 SET IDENTITY 来改变它的值。
INSERT_ID = value
修改它的值可以作为在执行 INSERT 或 ALTER TABLE 语句中要插入一个 AUTO_INCREMENT 值时的下一个值。它主要用于二进制日志(binary log)。
LAST_INSERT_ID = value
修改它的值可以作为 LAST_INSERT_ID() 的返回值。当数据表被更新时它的值会存放在二进制日志中,可以执行 LAST_INSERT_ID() 语句来取得它的值。设置它的值不会改变 C API 函数 mysql_insert_id() 返回的结果值。
NAMES {'charset_name' | DEFAULT}
SET NAMES 设置了 3 个会话变量 character_set_client , character_set_connection 和 character_set_results 为指定的字符集。默认的映射关系可以设定为 DEFAULT。请注意, SET NAMES 语法也不同于大多数其它的设置选项。它是自从 MySQL 4.1.0 以后才开始有的。
SQL_BUFFER_RESULT 强制将 SELECT 语句查询的结果放在临时表中。这可以让 MySQL 尽快释放加载表上的锁,同时还有助于改善向客户端发送结果需要较长时间的情况。这个变量是在 MySQL 3.23.13 中新增的。
SQL_LOG_BIN = {0 | 1}
如果设置为 0,就不再记录任何二进制日志了。必须要有 SUPER (超级) 权限方可修改它的值。这个变量是在 MySQL 3.23.13 中新增的。
SQL_LOG_OFF = {0 | 1}
如果设置为 1 ,系统将不记录任何普通的查询日志。必须要有 SUPER (超级) 权限方可修改它的值。
SQL_LOG_UPDATE = {0 | 1}
如果设置为 0 ,更新日志将不记录任何日志。必须要有 SUPER (超级) 权限方可修改它的值。这个变量是在 MySQL 3.22.5 中新增的。从 MySQL 5.0.0 开始,它已经建议不再使用,而变成了 SQL_LOG_BIN ( 详情请看“C.1.3 Changes in release 5.0.0 (22 Dec 2003: Alpha” ) 。
SQL_QUOTE_SHOW_CREATE = {0 | 1}
如果设置为 1 ,则在执行 SHOW CREATE TABLE 时就会把数据表名和字段用引号引起来;如果设置为 0 ,就不再引用了。这个选项默认是打开的,因为在数据库同步时需要所有的表名和字段名都必须引用起来才行。这个选项是在 MySQL 3.23.26 中新增的。详细的请查看“14.5.3.6 SHOW CREATE TABLE Syntax”。
SQL_SAFE_UPDATES = {0 | 1}
如果设置为 1 ,则 MySQL 会放弃那些在 WHERE 或 LIMIT 分句中没有使用键的 UPDATE 或 DELETE 语句。这就可能会捕获那些没有正确使用键并且可能会删除很多记录的 UPDATE 或 DELETE 语句。这个变量是在 MySQL 3.22.32 中新增的。
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE 'pattern']
SHOW COLUMNS 列出了给定表的所有字段。请注意,如果看到的字段类型和你以前用 CREATE TABLE 创建的字段类型不同的话,可能是 MySQL 有时候会在创建或修改表结构时修改字段类型。什么情况下 MySQL 会改变字段类型详情请看“14.2.6.1 Silent Column Specification Changes”。
从 MySQL 3.23.32 开始,就可以使用关键字 FULL 了。它使得输出的结果包括了当前用户对每个字段所具备的权限。从 MySQL 4.1 开始,关键字 FULL 也会令每个字段的注释显示出来。
还可以选择是否使用 db_name.tbl_name 的语法格式。以下的这2个语句是一样的:
mysql> SHOW COLUMNS FROM mytable FROM mydb;
mysql> SHOW COLUMNS FROM mydb.mytable;
SHOW FIELDS 和 SHOW COLUMNS 是一样的。同时还可以通过命令 mysqlshow db_name tbl_name 来列出所有的字段。
DESCRIBE 语句和 SHOW COLUMNS 显示的结果信息类似。详情请看“14.3.1 DESCRIBE Syntax (Get Information About Columns)”。
14.5.3.5 SHOW CREATE DATABASE 语法
SHOW CREATE DATABASE db_name
根据给定的数据库显示一个完整的 CREATE DATABASE 语句。它是在 MySQL 4.1 中新增的。
mysql> SHOW CREATE DATABASE test\G
*************************** 1. row ***************************
Database: test
Create Database: CREATE DATABASE `test`
/*!40100 DEFAULT CHARACTER SET latin1 */
14.5.3.6 SHOW CREATE TABLE 语法
SHOW CREATE TABLE tbl_name
根据给定的数据表显示一个完整的 CREATE TABLE 语句。它是在 MySQL 3.23.20 中新增的。
mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE t (
id INT(11) default NULL auto_increment,
s char(60) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM default charset utf8
SHOW CREATE TABLE 根据参数 SQL_QUOTE_SHOW_CREATE 的值来决定是否要把表名和字段名用引号引用起来。详情请看“14.5.3.1 SET Syntax”。作者: sunhw0725 时间: 2008-2-29 15:07
14.5.3.7 SHOW CREATE VIEW 语法
SHOW CREATE VIEW view_name
根据给定的试图名显示一个完整的 CREATE VIEW 语句。它是在 MySQL 5.0.1 中新增的。
mysql> SHOW CREATE VIEW v;
+-------+----------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------+
| v | CREATE VIEW `test`.`v` AS select 1 AS `a`,2 AS `b` |
+-------+----------------------------------------------------+
这个语法是在 MySQL 5.0.1 加上的。
14.5.3.8 SHOW DATABASES 语法
SHOW DATABASES [LIKE 'pattern']
SHOW DATABASES 列出了 MySQL 服务器上所有的数据库,通过 mysqlshow 命令也可以得到同样的结果。从 MySQL 4.0.2 开始,如果没有全局的 mysqlshow 权限的话,就只能列出那些有相关权限的数据库了。
如果服务器启动时增加参数 --skip-show-database,并且你没有 SHOW DATABASES 权限的话,就无法通过这个语句来列出数据库了。
14.5.3.9 SHOW ENGINES 语法
SHOW [STORAGE] ENGINES
SHOW ENGINES 显示了存储引擎相关的状态信息。这对检查是否支持某种存储引擎或者什么存储引擎是默认的非常有用。这个语句是在 MySQL 4.1.2 实现的。SHOW TABLE TYPES 跟它一样,但是不推荐使用。
mysql> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: MyISAM
Support: DEFAULT
Comment: Default engine as of MySQL 3.23 with great performance
*************************** 2. row ***************************
Engine: HEAP
Support: YES
Comment: Alias for MEMORY
*************************** 3. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
*************************** 4. row ***************************
Engine: MERGE
Support: YES
Comment: Collection of identical MyISAM tables
*************************** 5. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Alias for MERGE
*************************** 6. row ***************************
Engine: ISAM
Support: NO
Comment: Obsolete storage engine, now replaced by MyISAM
*************************** 7. row ***************************
Engine: MRG_ISAM
Support: NO
Comment: Obsolete storage engine, now replaced by MERGE
*************************** 8. row ***************************
Engine: InnoDB
Support: YES
Comment: Supports transactions, row-level locking, and foreign keys
*************************** 9. row ***************************
Engine: INNOBASE
Support: YES
Comment: Alias for INNODB
*************************** 10. row ***************************
Engine: BDB
Support: YES
Comment: Supports transactions and page-level locking
*************************** 11. row ***************************
Engine: BERKELEYDB
Support: YES
Comment: Alias for BDB
*************************** 12. row ***************************
Engine: NDBCLUSTER
Support: YES
Comment: Clustered, fault-tolerant, memory-based tables
*************************** 13. row ***************************
Engine: NDB
Support: YES
Comment: Alias for NDBCLUSTER
*************************** 14. row ***************************
Engine: EXAMPLE
Support: YES
Comment: Example storage engine
*************************** 15. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Support 字段的值表明是否支持什么存储引擎和哪种存储引擎是默认的。例如,如果服务器启动时增加参数 --default-table-type=InnoDB,那么 InnoDB 这行的 Support 字段的值就是 DEFAULT 。
14.5.3.10 SHOW ERRORS 语法
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW COUNT(*) ERRORS
这个语句跟 SHOW WARNINGS 类似,不同之处是 SHOW WARNINGS 同时显示了错误,警告以及注意,而它却只显示错误信息。SHOW ERRORS 是从 MySQL 4.1.0 开始有的。
LIMIT 分句和的 SELECT 语法一样,详情请看“14.1.7 SELECT Syntax”。
SHOW COUNT(*) ERRORS 语句显示了错误信息的总记录数。也可以通过取得变量 error_count 的值来获得总错误记录数:
SHOW COUNT(*) ERRORS;
SELECT @@error_count;
详情请看“14.5.3.21 SHOW WARNINGS Syntax”。
14.5.3.11 SHOW GRANTS 语法
SHOW GRANTS FOR user
该语句列出了某个 MySQL 帐户用 GRANT 语句授权的全部权限。
mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
从 MySQL 4.1.2 开始,也可以使用以下几个语句之一来列出当前会话具备的权限:
SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();
在 MySQL 4.1.2 以前,可以通过函数 CURRENT_USER() (MySQL 4.0.6 新增的 ) 的值来知道当前会话授权给哪个用户,并且把它的值用于 SHOW GRANTS 语句中。详情请看“13.8.3 Information Functions”。
SHOW GRANTS 是在 MySQL 3.23.4 中新增的。
14.5.3.12 SHOW INDEX 语法
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW INDEX 很像 ODBC 的 SQLStatistics 调用,它按照一定的格式返回数据表的索引信息。
SHOW INDEX 返回以下字段:
mysql> SHOW INDEX FROM mytable FROM mydb;
mysql> SHOW INDEX FROM mydb.mytable;
SHOW KEYS 和 SHOW INDEX 是一样的,也可以通过执行 mysqlshow -k db_name tbl_name 命令来列出数据表的索引信息。
14.5.3.13 SHOW INNODB STATUS 语法
SHOW INNODB STATUS
它显示了 InnoDB 存储引擎状态的其他的扩展信息。
14.5.3.14 SHOW LOGS 语法
SHOW [BDB] LOGS
SHOW LOGS 显示了现存的日志文件的状态。它是在MySQL 3.23.29中实现的。现在它只显示了Berkeley DB类型的日志文件,因此它的另一个用法是SHOW LOGS(从MySQL 4.1.1开始)。
SHOW LOGS 返回了以下几个字段:
File
日志文件的完整路径。
Type
日志文件的类型(例如:BDB 表示Berkeley DB类型的日志文件)。
Status
文件状态(FREE 表示文件可以删除,IN USE 表示在事务子系统中需要用到该日志文件)。
14.5.3.15 SHOW PRIVILEGES 语法
SHOW PRIVILEGES
SHOW PRIVILEGES 列出了所有MySQL基本服务器所支持的权限。它是在MySQL 4.1.0中实现的。
mysql> SHOW PRIVILEGES\G
*************************** 1. row ***************************
Privilege: Select
Context: Tables
Comment: To retrieve rows from table
*************************** 2. row ***************************
Privilege: Insert
Context: Tables
Comment: To insert data into tables
*************************** 3. row ***************************
Privilege: Update
Context: Tables
Comment: To update existing rows
*************************** 4. row ***************************
Privilege: Delete
Context: Tables
Comment: To delete existing rows
*************************** 5. row ***************************
Privilege: Index
Context: Tables
Comment: To create or drop indexes
*************************** 6. row ***************************
Privilege: Alter
Context: Tables
Comment: To alter the table
*************************** 7. row ***************************
Privilege: Create
Context: Databases,Tables,Indexes
Comment: To create new databases and tables
*************************** 8. row ***************************
Privilege: Drop
Context: Databases,Tables
Comment: To drop databases and tables
*************************** 9. row ***************************
Privilege: Grant
Context: Databases,Tables
Comment: To give to other users those privileges you possess
*************************** 10. row ***************************
Privilege: References
Context: Databases,Tables
Comment: To have references on tables
*************************** 11. row ***************************
Privilege: Reload
Context: Server Admin
Comment: To reload or refresh tables, logs and privileges
*************************** 12. row ***************************
Privilege: Shutdown
Context: Server Admin
Comment: To shutdown the server
*************************** 13. row ***************************
Privilege: Process
Context: Server Admin
Comment: To view the plain text of currently executing queries
*************************** 14. row ***************************
Privilege: File
Context: File access on server
Comment: To read and write files on the server作者: sunhw0725 时间: 2008-2-29 15:07
14.5.3.16 SHOW PROCESSLIST 语法
SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST 显示了有哪些线程在运行。也可以执行 mysqladmin processlist 命令来得到这些信息。如果有 SUPER 权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的MySQL帐户运行的线程)。详情请看“14.5.4.3 KILL Syntax”。如果没有使用关键字 FULL,则只能看到每个查询的前100个字符。
SHOW STATUS [LIKE 'pattern']
SHOW STATUS 显示了各种服务器状态信息。也可以通过运行 mysqladmin extended-status 命令来得到结果。
这里有部分输出结果,某些变量和它对应的值可能跟你的系统不大一样。各种变量所代表的意义详情请看“5.2.4 Server Status Variables”。
mysql> SHOW STATUS LIKE 'Key%';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| Key_blocks_used | 14955 |
| Key_read_requests | 96854827 |
| Key_reads | 162040 |
| Key_write_requests | 7589728 |
| Key_writes | 3813196 |
+--------------------+----------+
14.5.3.18 SHOW TABLE STATUS 语法
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
SHOW TABLE STATUS(在MySQL 3.23新增的)跟 SHOW TABLE 类似,它还显示每个表的许多相关信息。也可以通过运行 mysqlshow --status db_name 命令来显示同样的结果。
SHOW TABLE STATUS 返回了以下几个字段的信息:
Name
表名。
Engine
数据表的存储引擎类型,在MySQL 4.1.2以前,这个值被标志为 Type。详情请看“15 MySQL Storage Engines and Table Types”。
SHOW [OPEN] TABLES [FROM db_name] [LIKE 'pattern']
SHOW TABLES 列出了给定数据库中的非临时(non-TEMPORARY)表。也可以通过命令 mysqlshow db_name 来列出这些表。
在MySQL 5.0.1以前,SHOW TABLES 的结果中只有一个字段显示表名。从MySQL 5.0.1开始,SHOW TABLES 还列出了数据库中的视图,还有第二个字段。第二字段的值是表的 BASE TABLE (基表)或者视图名。
请注意,如果没有表的相应权限,那么在 SHOW TABLES 或 mysqlshow db_name 结果中就不会列出该表。
SHOW OPEN TABLES 列出了所有当前正被打开的表。详情请看“7.4.8 How MySQL Opens and Closes Tables”。显示结果中的 Comment 字段告诉我们该表被 cached 和 in_use 的时间。从MySQL 3.23.33开始,可以使用 OPEN 关键字。
14.5.3.20 SHOW VARIABLES语法
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern']
SHOW VARIABLES 显示了一些MySQL的系统变量值。这些信息也可以通过运行命令 mysqladmin variables 来得到。
GLOBAL 和 SESSION 可选项是从MySQL 4.0.3开始可以用的。如果是 SESSION,就会得到每次新连接中使用的变量值。如果是