全部产品
阿里云办公

OceanBase SQL简介

更新时间:2017-06-07 13:26:11

语言结构

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_namedb_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

支持语句

OceanBase1.0支持的语句

  • 数据定义语句

    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等。

SQL限制与约束:

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只支持单表查询;

  • OceanBase 1.0一期TRUNCATE TABLE语句暂时支持单个Partition的表,暂不支持多Parition的表;