MySQL语言参考:语言结构(4)
时间:2008-04-20 来源:gslsok
下面是某些变量的描述:
变量 | 描述 |
identity | last_insert_id 的别名 (Sybase 兼容) |
sql_low_priority_updates | low_priority_updates 的别名 |
sql_max_join_size | max_join_size 的别名 |
delay_key_write_for_all_tables | 如它与 delay_key_write 一起被设置,那么所有新打开的 MyISAM 表将使用 delayed key writes. |
version | VERSION() 的别名 (Sybase (?) 兼容) |
在启动选项章节中可以找到其它的变量的描述,SHOW VARIABLES 的描述在 SET 部分。查看章节 4.1.1 mysqld 命令行选项。查看章节 4.5.6.4 SHOW VARIABLES。查看章节 5.5.6 SET 句法。
6.1.6 注释句法
MySQL 服务器支持 # 到该行结束、-- 到该行结束 以及 /* 行中间或多个行 */ 的注释方格:
mysql> SELECT 1+1; # 这个注释直到该行结束 mysql> SELECT 1+1; -- 这个注释直到该行结束 mysql> SELECT 1 /* 这是一个在行中间的注释 */ + 1; mysql> SELECT 1+ /* 这是一个 多行注释的形式 */ 1;
注意 -- (双长划) 注释风格要求在两个长划后至少有一个空格!
尽管服务器理解刚才描述的注释句法,但 MySQL 客户端的语法分析在 /* ... */ 注释方式上还有所限止:
- 单引号和双引号被用来标志一个被引用字符串的开始,即使是在一个注释中。如果注释中的引号没有另一个引号与之配对,那和语法分析程序就不会认为注释结束。如果你以交互式运行 mysql,你会产生困惑,因为提示符从 mysql> 变为 '> 或 ">。
- 一个分号被用于指出当前 SQL 语句的结束并且跟随它的任何东西表示下一行的开始。
不论你是以交互式运行 mysql 还是将命令放在一个文件中,然后以 mysql < some-file 告诉 mysql 读取它的输入,这个限制均存在。
MySQL 支持 `--' ANSI SQL 注释风格,但在两个长划后必须跟有一个空格。查看章节 1.8.4.7 `--' 作为一个注释的开始。
6.1.7 MySQL 对保留字挑剔吗?
一个常见的问题来于试图使用 MySQL 内置的数据类型或函数名作为表的字段名来创建数据表,例如 TIMESTAMP 或 GROUP。但是,允许你这样做(例如,ABS 是一个允许的列名),当使用函数名也是列名的函数时,函数名与后面跟着的 “(” 之间不允许存在空格。
下面的词在 MySQL 中是被明确保留的。它们大多数被 ANSI SQL92 禁止作为列或表名(例如, GROUP)。一些被保留是因为 MySQL 需要它们并且它使用的是一个 yacc 语法分析器:
单词 | 单词 | 单词 |
ADD | ALL | ALTER |
ANALYZE | AND | AS |
ASC | AUTO_INCREMENT | BDB |
BEFORE | BERKELEYDB | BETWEEN |
BIGINT | BINARY | BLOB |
BOTH | BTREE | BY |
CASCADE | CASE | CHANGE |
CHAR | CHARACTER | CHECK |
COLLATE | COLUMN | COLUMNS |
CONSTRAINT | CREATE | CROSS |
CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP |
DATABASE | DATABASES | DAY_HOUR |
DAY_MINUTE | DAY_SECOND | DEC |
DECIMAL | DEFAULT | DELAYED |
DELETE | DESC | DESCRIBE |
DISTINCT | DISTINCTROW | DIV |
DOUBLE | DROP | ELSE |
ENCLOSED | ERRORS | ESCAPED |
EXISTS | EXPLAIN | FALSE |
FIELDS | FLOAT | FOR |
FORCE | FOREIGN | FROM |
FULLTEXT | FUNCTION | GRANT |
GROUP | HASH | HAVING |
HIGH_PRIORITY | HOUR_MINUTE | HOUR_SECOND |
IF | IGNORE | IN |
INDEX | INFILE | INNER |
INNODB | INSERT | INT |
INTEGER | INTERVAL | INTO |
IS | JOIN | KEY |
KEYS | KILL | LEADING |
LEFT | LIKE | LIMIT |
LINES | LOAD | LOCALTIME |
LOCALTIMESTAMP | LOCK | LONG |
LONGBLOB | LONGTEXT | LOW_PRIORITY |
MASTER_SERVER_ID | MATCH | MEDIUMBLOB |
MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
MINUTE_SECOND | MOD | MRG_MYISAM |
NATURAL | NOT | NULL |
NUMERIC | ON | OPTIMIZE |
OPTION | OPTIONALLY | OR |
ORDER | OUTER | OUTFILE |
PRECISION | PRIMARY | PRIVILEGES |
PROCEDURE | PURGE | READ |
REAL | REFERENCES | REGEXP |
RENAME | REPLACE | REQUIRE |
RESTRICT | RETURNS | REVOKE |
RIGHT | RLIKE | RTREE |
SELECT | SET | SHOW |
SMALLINT | SOME | SONAME |
SPATIAL | SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS |
SQL_SMALL_RESULT | SSL | STARTING |
STRAIGHT_JOIN | STRIPED | TABLE |
TABLES | TERMINATED | THEN |
TINYBLOB | TINYINT | TINYTEXT |
TO | TRAILING | TRUE |
TYPES | UNION | UNIQUE |
UNLOCK | UNSIGNED | UPDATE |
USAGE | USE | USER_RESOURCES |
USING | VALUES | VARBINARY |
VARCHAR | VARCHARACTER | VARYING |
WARNINGS | WHEN | WHERE |
WITH | WRITE | XOR |
YEAR_MONTH | ZEROFILL |
以下的符号(来自上表)是被 ANSI SQL 禁止的,但是可以被 MySQL 用于列/表名。这是由于用他们命名是很自然的并且有很多的人已经使用了它们。
- ACTION
- BIT
- DATE
- ENUM
- NO
- TEXT
- TIME
- TIMESTAMP