更新时间:2017-06-07 13:26
OceanBase SQL语句中涉及以下元素:
文字值包括字符串、数值、日期、时间、十六进制、布尔值和NULL。
字符串使用单引号('
)或双引号(”
)引起来的字符序列。如果OceanBase SQL模式启用了ANSI_QUOTES,表示只用单引号引用字符串,用双引号引用的字符串被解释为一个识别符。
在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\’)开始,即所谓的转义字符。转义字符对大小写敏感。
OceanBase识别的转义字符如下表所示。
转义字符 | 含义 |
---|---|
\b | 退格符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | tab字符 |
\\ | 反斜线字符 |
\’ | 单引号 |
\” | 双引号 |
\_ | _字符 |
\% | %字符 |
\0 | 空字符(NULL) |
\Z | ASCII 26(控制(Ctrl)-Z) |
数值可以分为精确数值(整数和定点数值)和浮点数值。数值可以使用.
作为十进制间隔符。数值也可以在前面加一个-
来表示负值。
日期值可以有多种形式,例如单引号字符串或数值。例如:‘2015-07-21’,‘20150721’和20150721。
十六进制值。在数字上下文中,十六进制数如同整数(64位精度)。在字符串上下文,如果有二进制字符串,每对二进制数字被转换为一个字符。
布尔值,常量TRUE等于1,常量FALSE等于0。常量名可以写成大写或小写。
NULL值表示“没有数据”。NULL可以写成大写或小写。请注意NULL值不同于数值类型的0或字符串类型的空字符串。
OceanBase1.0 SQL语句中的租户、数据库、表、视图、索引、表格组、列名和别名等Schema对象名称之为识别符。
OceanBase识别符的最大长度和允许的字符,如下表所示。
识别符 | 最大长度(字节) | 允许的字符 |
---|---|---|
用户名 | 16 | 大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能OceanBase的关键字。 |
租户 | 64 | 大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能OceanBase的关键字。 |
数据库 | 64 | 大小写英文字母,数字和下划线,‘$’组成。 |
表组 | 64 | 大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能OceanBase的关键字。 |
表 | 64 | 大小写英文字母,数字和下划线,‘$’组成。 |
列 | 64 | 大小写英文字母,数字和下划线,‘$’组成。 |
索引 | 64 | 大小写英文字母,数字和下划线,‘$’组成。 |
别名 | 255 | 大小写英文字母,数字和下划线,‘$’组成。 |
变量 | 64 | 文字数字字符、‘.’、‘_’和‘$’组成。 |
注:除了表内注明的限制,识别符不可以包含ASCII 0或值为255的字节。数据库、表和列名不应以空格结尾。在识别符中尽管可以使用引号识别符,应尽可能避免这样使用。
识别符可以用引用符引起来也可以不引起来。如果识别符是一个保留字或包含特殊字符,无论何时使用,必须将它引起来。OceanBase识别符的引用符是反引号(`
)。如果服务器模式包括ANSI_QUOTES模式选项,还可以用双引号将识别符引起来。
例如:
Oceanbase>create table `add`(id int, `select` int);
Query OK, 0 rows affected (0.11 sec)
Oceanbase> create table "delete"(id int, "select" int);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"delete"(id int, "select" int)' at line 1
Oceanbase> set sql_mode='ANSI_QUOTES';
Query OK, 0 rows affected (0.00 sec)
Oceanbase> create table "delete"(id int, "select" int);
Query OK, 0 rows affected (0.12 sec)
识别符引用
OceanBase允许使用由单个识别符或多个识别符组成的名字。多个识别符之间以句点(.
)间隔开。在OceanBase中可以引用下面形式的列:
列参考 | 含义 |
---|---|
col_name | 列col_name,查询中使用的表包含有此名字的列。 |
tbl_name.col_name | 默认数据库中的表tbl_name的列col_name。 |
db_name.tbl_name.col_name | 数据库db_name中的表tbl_name的列col_name。 |
如果多部分名的组件需要引用,应分别将它们引起来而不要将整个名引起来。例如,'my-tables'.'my-column'有效,而'my-tables.my-column'无效。
不需要在语句中为列指定tbl_name或db_name.tbl_name前缀,除非列不确定。如表t1和t2各包含一个列c,你使用SELECT语句在t1和t2中搜索c。在这种情况下,c不确定,因为它在语句中使用的表内不唯一。你必须用表名t1.c或t2.c限定它,表示指哪个表。同样,要想用同一语句搜索数据库db1中的表t和数据库db2中的表t,你必须将那些表中的列指为db1.t.col_name和db2.t.col_name。
限定名中句点后面的字必须为一个识别符,因此不需要将它引起来,即使是一个保留字。
语法.tbl_name
表示当前数据库中的tbl_name。该语法与ODBC兼容,因为某些ODBC程序在表名前面加前缀.
字符。
识别符大小写敏感性
在OceanBase中识别符大小写不敏感,但为了保持与MySQL兼容,同样设计了与MySQL一样的lower_case_tables_name系统参数,以决定表名和库名这两种识别符大小写是否敏感。
值 | 含义 |
---|---|
0 | 表名和库名比较对大小写敏感 |
1 | 表名和库名比较对大小写不敏感 |
可以先在用户变量中保存值然后在以后引用,这样可以将值从一个语句传递到另一个语句。用户变量与连接有关,一个客户端定义的用户变量不能被其他客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。
用户变量的形式如@var_name,其中变量名var_name可以由当前字符集的文字、数字、字符、‘.’、‘_’和‘$’组成。
OceanBase可以访问系统和连接变量。当服务器运行时许多变量可以动态更改。
OceanBase支持3种注释语法:
从‘#’字符到行尾。
从 ‘ __’序列到行尾。请注意‘ __’(双破折号)注释要求第2个破折号后面至少跟一个空格符。
从/* 序列到后面的 */序列。结束序列不一定在同一行中,因此该语法允许注释跨越多行。
在OceanBase中,保留字如下表所示。
保留字 | ||||
---|---|---|---|---|
NAME_OB | STRING_VALUE | INTNUM | DATE_VALUE | TIMESTAMP_VALUE |
HINT_VALUE | BOOL_VALUE | APPROXNUM | DECIMAL_VAL | NULLX |
QUESTIONMARK | SYSTEM_VARIABLE | TEMP_VARIABLE | CLIENT_VERSION | MYSQL_DRIVER |
HEX_STRING_VALUE | EXCEPT | UNION | INTERSECT | INNER |
RIGHT | FULL | LEFT | CROSS | JOIN |
SET_VAR | OR_OP | OR | XOR | AND_OP |
AND | ELSE | THEN | WHEN | CASE |
BETWEEN | LOWER_THAN_COMP | REGEXP | IN | LIKE |
IS | COMP_NE | COMP_LT | COMP_LE | COMP_GT |
COMP_GE | COMP_NSEQ | COMP_EQ | ESCAPE | SHIFT_RIGHT |
SHIFT_LEFT | POW | DIV | MOD | LOWER_THAN_NEG |
CNNOP | NEG | NOT2 | NOT | COLLATE |
BINARY | INTERVAL | LOWER_KEY | KEY | ERROR |
READ_STATIC | INDEX_HINT | USE_NL | FROZEN_VERSION | TOPK |
QUERY_TIMEOUT | READ_CONSISTENCY | HOTSPOT | LOG_LEVEL | LEADING_HINT |
ORDERED | FULL_HINT | USE_MERGE | USE_HASH | USE_PLAN_CACHE |
STRONG | FROZEN | STATIC | WEAK | _BINARY |
_UTF8 | _UTF8MB4 | HINT_BEGIN | HINT_END | END_P |
ACCESSIBLE | ADD | ALTER | ANALYZE | ALL |
AS | ASENSITIVE | ASC | BEFORE | BIGINT |
BLOB | BOTH | BY | CALL | CASCADE |
CHANGE | CHAR | CHARACTER | CHECK | CONDITION |
CONSTRAINT | CONTINUE | CONVERT | COLUMN | CREATE |
CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR |
DAY_HOUR | DAY_MICROSECOND | DAY_MINUTE | DAY_SECOND | DATABASE |
DATABASES | DEC | DECIMAL | DECLARE | DEFAULT |
DELAYED | DELETE | DESC | DESCRIBE | DETERMINISTIC |
DISTINCT | DISTINCTROW | DOUBLE | DROP | DUAL |
EACH | ENCLOSED | ELSEIF | ESCAPED | EXISTS |
EXIT | EXPLAIN | FETCH | FOREIGN | FLOAT |
FLOAT4 | FLOAT8 | FOR | FORCE | FROM |
FULLTEXT | GET | GRANT | GROUP | HAVING |
HIGH_PRIORITY | HOUR_MICROSECOND | HOUR_MINUTE | HOUR_SECOND | IF |
IFIGNORE | INDEX | INFILE | INOUT | INSENSITIVE |
INT | INT1 | INT2 | INT3 | INT4 |
INT8 | INTEGER | INSERT | INTO | IO_AFTER_GTIDS |
IO_BEFORE_GTIDS | ISNULL | ITERATE | KEYS | KILL |
LEADING | LEAVE | LIMIT | LINEAR | LINES |
LOAD | LOCALTIME | LOCALTIMESTAMP | LOCK_ | LONG |
LONGBLOB | LONGTEXT | LOOP | LOW_PRIORITY | MASTER_BIND |
MASTER_SSL_VERIFY_SERVER_CERT | MATCH | MAXVALUE | MEDIUMBLOB | MEDIUMINT |
MEDIUMTEXT | MIDDLEINT | MINUTE_MICROSECOND | MINUTE_SECOND | MODIFIES |
NATURAL | NO_WRITE_TO_BINLOG | NUMERIC | ON | OPTION |
OPTIMIZE | OPTIONALLY | ORDER | OUT | OUTER |
OUTFILE | PROCEDURE | PURGE | PARTITION | PRECISION |
PRIMARY | RANGE | READ | READ_WRITE | READS |
REAL | RELEASE | REFERENCES | RENAME | REPLACE |
REPEAT | REQUIRE | RESIGNAL | RESTRICT | RETURN |
REVOKE | RLIKE | SECOND_MICROSECOND | SELECT | SCHEMA |
SCHEMAS | SEPARATOR | SET | SENSITIVE | SHOW |
SIGNAL | SMALLINT | SPATIAL | SPECIFIC | SQL |
SQLEXCEPTION | SQLSTATE | SQLWARNING | SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS |
SQL_SMALL_RESULT | SSL_ | STARTING | STRAIGHT_JOIN | TERMINATED |
TINYBLOB | TINYINTTINYTEXT | TABLE | TABLEGROUP | TO |
TRAILING | TRIGGER | UNDO | UNIQUE | UNLOCK |
UNSIGNED | UPDATE | USAGE | USE | USING |
UTC_DATE | UTC_TIME | UTC_TIMESTAMP | VALUES | VARBINARY |
VARCHAR | VARCHARACTER | VARYING | WHERE | WHILE |
WITH | WRITE | YEAR_MONTH | ZEROFILL | GLOBAL_ALIAS |
SESSION_ALIAS | ACCOUNT | ACTION | ACTIVE | ADDDATE |
AFTER | AGAINST | AGGREGATE | ALGORITHM | ANALYSE |
ANY | ASCII | AT | AUTHORS | AUTOEXTEND_SIZE |
AUTO_INCREMENT | AVG | AVG_ROW_LENGTH | BACKUP | BASIC |
BEGI | BINLOG | BIT | BLOCK | BLOCK_SIZE |
BOOL | BOOLEAN | BOOTSTRAP | BTREE | BYTE |
CACHE | CANCEL | CASCADED | CAST | CATALOG_NAME |
CHAIN | CHANGED | CHARSET | CHECKSUM | CIPHER |
CLASS_ORIGIN | CLEAN | CLEAR | CLIENT | CLOSE |
COALESCE | CODE | COLLATION | COLUMN_FORMAT | COLUMN_NAME |
COLUMNS | COMMENT | COMMIT | COMMITTED | COMPACT |
COMPLETION | COMPRESSED | COMPRESSION | CONCURRENT | CONNECTION |
CONSISTENT | CONSISTENT_MODE | CONSTRAINT_CATALOG | CONSTRAINT_NAME | CONSTRAINT_SCHEMA |
CONTAINS | CONTEXT | CONTRIBUTORS | COPY | COUNT |
CPU | CREATE_TIMESTAMP | CUBE | CURDATE | CURRENT |
CURTIME | CURSOR_NAME | DATA | DATAFILE | DATE |
DATE_ADD | DATE_SUB | DATETIME | DAY | DEALLOCATE |
DEFAULT_AUTH | DEFINER | DELAY | DELAY_KEY_WRITE | DES_KEY_FILE |
DESTINATION | DIAGNOSTICS | DIRECTORY | DISABLE | DISCARD |
DISK | DO | DUMP | DUMPFILE | DUPLICATE |
DYNAMIC | EFFECTIVE | ENABLE | END | ENDS |
ENGINE_ | ENGINES | ENUM | ERROR_P | ERRORS |
EVENT | EVENTS | EVERY | EXCHANGE | EXECUTE |
EXPANSION | EXPIRE | EXPIRE_INFO | EXPORT | EXTENDED |
EXTENT_SIZE | EXTRACT | FAST | FAULTS | FIELDS |
FILEX | FINAL_COUNT | FIRST | FIXED | FLUSH |
FOLLOWER | FORMAT | FOUND | FREEZE | FUNCTION |
GENERAL | GEOMETRY | GEOMETRYCOLLECTION | GET_FORMAT | GLOBAL |
GRANTS | GROUP_CONCAT | HANDLER | HASH | HELP |
HOST | HOSTS | HOUR | IDENTIFIED | IGNORE |
IGNORE_SERVER_IDS | IMPORT | INDEXES | INITIAL_SIZE | INSERT_METHOD |
INSTALL | INVOKER | IO | IO_THREAD | IPC |
ISOLATION | ISSUER | JSON | KEY_BLOCK_SIZE | KEY_VERSION |
LANGUAGE | LAST | LEADER | LEAVES | LESS |
LEVEL | LINESTRING | LIST_ | LOCAL | LOCKED |
LOCKS | LOGFILE | LOGS | MAJOR | MASTER |
MASTER_AUTO_POSITION | MASTER_CONNECT_RETRY | MASTER_DELAY | MASTER_HEARTBEAT_PERIOD | MASTER_HOST |
MASTER_LOG_FILE | MASTER_LOG_POS | MASTER_PASSWORD | MASTER_PORT | MASTER_RETRY_COUNT |
MASTER_SERVER_ID | MASTER_SSL | MASTER_SSL_CA | MASTER_SSL_CAPATH | MASTER_SSL_CERT |
MASTER_SSL_CIPHER | MASTER_SSL_CRL | MASTER_SSL_CRLPATH | MASTER_SSL_KEY | MASTER_USER |
MAX | MAX_CONNECTIONS_PER_HOUR | MAX_CPU | MAX_DISK_SIZE | MAX_IOPS |
MAX_MEMORY | MAX_QUERIES_PER_HOUR | MAX_ROWS | MAX_SESSION_NUM | MAX_SIZE |
MAX_UPDATES_PER_HOUR | MAX_USER_CONNECTIONS | MEDIUM | MEMORY | MEMTABLE |
MERGE | MESSAGE_TEXT | META | MICROSECOND | MIGRATE |
MIN | MIN_CPU | MIN_IOPS | MIN_MEMORY | MINOR |
MIN_ROWS | MINUTE | MODE | MODIFY | MONTH |
MOVE | MULTILINESTRING | MULTIPOINT | MULTIPOLYGON | MUTEX |
MYSQL_ERRNO | NAME | NAMES | NATIONAL | NCHAR |
NDB | NDBCLUSTER | NEW | NEXT | NO |
NODEGROUP | NONE | NORMAL | NOW | NOWAIT |
NO_WAIT | NUMBER | NVARCHAR | OFF | OFFSET |
OLD_PASSWORD | ONE | ONE_SHOT | ONLY | OPEN |
OPTIONS | OWNER | PACK_KEYS | PAGE | PARAMETERS |
PARSER | PARTIAL | PARTITION_ID | PARTITIONING | PARTITIONS |
PASSWORD | PAUSE | PHASE | PLUGIN | PLUGIN_DIR |
PLUGINS | POINT | POLYGON | POOL | PORT |
PREPARE | PRESERVE | PREV | PRIMARY_ZONE | PRIVILEGES |
PROCESSLIST | PROFILE | PROFILES | PROXY | QUARTER |
QUERY | QUICK | READ_ONLY | REBUILD | RECOVER |
RECYCLE | REDO_BUFFER_SIZE | REDOFILE | REDUNDANT | REFRESH |
RELAY | RELAYLOG | RELAY_LOG_FILE | RELAY_LOG_POS | RELAY_THREAD |
RELOAD | REMOVE | REORGANIZE | REPAIR | REPEATABLE |
REPLICA | REPLICA_NUM | REPLICATION | REPORT | RESET |
RESOURCE | RESOURCE_POOL_LIST | RESTART | RESTORE | RESUME |
RETURNED_SQLSTATE | RETURNS | REVERSE | ROLLBACK | ROLLUP |
ROOT | ROOTTABLE | ROUTINE | ROW | ROW_COUNT |
ROW_FORMAT | ROWS | RTREE | SAVEPOINT | SCHEDULE |
SCHEMA_NAME | SCOPE | SECOND | SECURITY | SERIAL |
SERIALIZABLE | SERVER | SERVER_IP | SERVER_PORT | SERVER_TYPE |
SESSION | SESSION_USER | SET_MASTER_CLUSTER | SET_SLAVE_CLUSTER | SHARE |
SHUTDOWN | SIGNED | SIMPLE | SLAVE | SLOW |
SNAPSHOT | SOCKET | SOME | SONAME | SOUNDS |
SOURCE | SPFILE | SQL_AFTER_GTIDS | SQL_AFTER_MTS_GAPS | SQL_BEFORE_GTIDS |
SQL_BUFFER_RESULT | SQL_CACHE | SQL_NO_CACHE | SQL_THREAD | SQL_TSI_DAY |
SQL_TSI_HOUR | SQL_TSI_MINUTE | SQL_TSI_MONTH | SQL_TSI_QUARTER | SQL_TSI_SECOND |
SQL_TSI_WEEK | SQL_TSI_YEAR | START | STARTS | STATS_AUTO_RECALC |
STATS_PERSISTENT | STATS_SAMPLE_PAGES | STATUS | STEP_MERGE_NUM | STOP |
STORAGE | STORING | STRING | SUBCLASS_ORIGIN | SUBDATE |
SUBJECT | SUBPARTITION | SUBPARTITIONS | SUBSTR | SUBSTRING |
SUM | SUPER | SUSPEND | SWAPS | SWITCH |
SWITCHES | SYSTEM | SYSTEM_USER | TABLE_CHECKSUM | TABLE_ID |
TABLE_NAME | TABLEGROUPS | TABLES | TABLESPACE | TABLET |
TABLET_MAX_SIZE | TEMPORARY | TEMPTABLE | TENANT | TEXT |
THAN | TIME | TIMESTAMP | TIMESTAMPADD | TIMESTAMPDIFF |
TINYINT | TRADITIONAL | TRANSACTION | TRIGGERS | TRIM |
TRUNCATE | TYPE | TYPES | UNCOMMITTED | UNDEFINED |
UNDO_BUFFER_SIZE | UNDOFILE | UNICODE | UNINSTALL | UNIT |
UNIT_NUM | UNLOCKED | UNTIL | UNUSUAL | UPGRADE |
USE_BLOOM_FILTER | UNKNOWN | USE_FRM | USER | USER_RESOURCES |
VALUE | VARIABLES | VERBOSE | VIEW | WAIT |
WARNINGS | WEEK | WEIGHT_STRING | WORK | WRAPPER |
X509_ | XA | XML | YEAR | ZONE |
ZONE_LIST | LOCATION | PLAN | HIGHER_THAN_NEG |
数据定义语句
CREATE DATABASE, ALTER DATABASE, DROP DATABASE, CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX,DROP INDEX,CREATE VIEW,DROP VIEW,ALTER VIEW,TRUNCATE TABLE;
数据操作语句
INSERT,REPLACE,DELETE,UPDATE, SELECT查询及查询子句;
事务类语句
START TRANSACTION,COMMIT,ROLLBACK;
数据库管理语句
CREATE TABLEGROUP,DROP TABLEGROUP, CREATE USER,DROP USER,SET,SET GLOBAL,SET PASSWORD,RENAME USER,ALTER USER,GRANT,REVOKE, ALTER SYSTEM;
实用的SQL语句
SHOW,KILL,USE,DESCRIBE,EXPLAIN,WHEN,HINT,HELP等。
OceanBase的SQL限制与约束:
暂不支持用户自定义数据类型、自定义函数;
暂不支持可更新视图、存储过程、触发器、游标;
暂不支持临时表;
暂不支持类似BEGIN…END,LOOP...END LOOP,REPEAT...UNTIL...END REPEAT, WHILE...DO...END WHILE等的复合语句;
暂不支类似IF,WHILE等流程控制类语句;
暂不支持INSERT/REPLACE语句中的带SELECT子句的修改,暂不支持DELETE语句多表删除,暂不支持UPDATE多表更新等;
最大长度或个数限制如下:
a) 建表或索引的时候,主键长度之和小于等于16K,单行长度小于等于1.5M;
b) 单个VARCHAR列长度小于等于262,143字节(最大长度是256K);
c) 主键个数小于等于64个
d) 单表的最大列数为512
e) 单表的最大索引数为128
SELECT…FOR UPDATE只支持单表查询;
在文档使用中是否遇到以下问题
更多建议
匿名提交