【网学网提醒】:以下是网学会员为您推荐的H2DatabaseSQL语法,希望本篇文章对您学习有所帮助。
SQL语法
数据处理语句(DataManipulation)
数据定义语句(DataDefinition)
其他语句
其他语法
系统表
SELECT
SELECT[TOP][DISTINCT|ALL][,...]
FROM[,...][WHERE]
[GROUPBY[,...]][HAVING]
[{UNION[ALL]|MINUS|EXCEPT|INTERSECT}][ORDERBY[,...]]
[LIMIT[OFFSET][SAMPLE_SIZE]]
[FORUPDATE]
从一张表或多张表查询数据。GROUPBY根据给定的表达式(expression)将结果进行分组,HAVING是在分组之后进行行过滤。ORDERBY根据给定的字段或表达式对结果集进行排序。UNION联合这个查询的结果集和另一个查询的结果集。LIMIT限制查询返回的行数,OFFSET指定多少行被跳过,SAMPLE_SIZE限制聚集查询读取的行数。如果指定FORUPDATE,表被锁定用于写。例子如下:SELECT*FROMTEST;
SELECT*FROMTESTORDERBYNAME;
SELECTID,COUNT(*)FROMTESTGROUPBYID;
SELECTNAME,COUNT(*)FROMTESTGROUPBYNAMEHAVING
COUNT(*)>2;
SELECT'ID'COL,MAX(ID)ASMAXFROMTESTUNIONSELECT'NAME',
MAX(NAME)FROMTEST;
SELECT*FROMTESTLIMIT1000;
SELECT*FROM(SELECTID,COUNT(*)FROMTEST
GROUPBYIDUNIONSELECTNULL,COUNT(*)FROMTEST)
ORDERBY1NULLSLAST;
INSERT
INSERTINTO[([,...])]{VALUES{({DEFAULT|}[,...])}[,...]|}插入新行到表中。
例子如下:
INSERTINTOTESTVALUES(1,'Hello')
UPDATE
UPDATE[[AS]]SET{{DEFAULT|}}[,...][WHERE]更新表中的数据:
例子如下:
UPDATETESTSETNAME='Hi'WHEREID=1;
UPDATEPERSONPSETNAME=(SELECTA.NAMEFROMADDRESSAWHERE
A.ID=P.ID);
DELETE
DELETEFROM[WHERE]从表中删除行。
例子如下:
DELETEFROMTESTWHEREID=2
BACKUP
BACKUPTO备份数据库文件到一个.zip文件按中,对象不能被锁定,执行这条语句需要管理员权限。
例子如下:
BACKUPTO'backup.zip'
CALL
CALL计算一个简单的表达式。
例子如下:
CALL15*25
EXPLAIN
EXPLAIN[PLANFOR]{|||}显示语句的执行计划。
例子如下:
EXPLAINSELECT*FROMTESTWHEREID=1
MERGE
MERGEINTO[([,...])][KEY([,...])]{VALUES{({DEFAULT|}[,...])}[,...]|}如果记录不存在,插入记录,如果记录存在,更新存在的记录,如果没有指定的键(KEY)字段,查找记录时就使用主键字段,如果一个新纪录影响多个记录,将抛出异常,如果表包含自增的键或标识字段,生产的键被设置为0,否则,它就被设置为新的键值。
例子如下:
MERGEINTOTESTKEY(ID)VALUES(2,'World')
RUNSCRIPT
RUNSCRIPTFROM[COMPRESSION{DEFLATE|LZF|ZIP|GZIP}][CIPHERPASSWORD][CHARSET]运行指定SQL脚本文件,SQL脚本文件是包含SQL语句的文本文件,每个语句必须使用';'
结束。这个语句也可以用于从一个备份恢复数据库。密码必须使用单引号引用,它是区分大小写的,并且可以包含空格。
压缩算法必须与创建脚本的压缩算法相匹配。当使用加密时,只有DEFLATE和LZF被支持(LZF性能更快,但是使用更多的空间)。可以不指定文件,使用URL替代。
执行这个命令需要管理员权限。
例子如下:
RUNSCRIPTFROM'backup'
SCRIPT
SCRIPT[SIMPLE][NODATA][NOPASSWORDS][NOSETTINGS][DROP][BLOCKSIZE][TO[COMPRESSION{DEFLATE|LZF|ZIP|GZIP}][CIPHERPASSWORD]]从数据库创建SQL脚本。
SIMPLE表示不使用多行插入语句。NODATA表示不会发出INSERT语句。如果DROP选项被指定,表(TABLE)、视图(VIEW)和序列(SEQUENCE)的DROP语句被创建。如果BLOCKSIZE被设置,当CLOB和BLOB的尺寸比设置值大时,将被分割为多块。
如果TO文件没有被指定,脚本将返回一个结果集。这个语句也能用于创建数据库备份,对于长期存储,它比拷贝数据库文件更便携。
如果一个文件名被指定,整个脚本(包括插入语句)都被写入到这个文件,一个不包含插入语句的结果集将被返回,当要加密时,只有DEFLATE和LZF被支持(LZF性能更快,但需要更多的空间)。
这个语句在运行时,将锁定对象。密码必须使用单引号引用,它是区分大小写的,并且可以包含空格。
例子如下:
SCRIPTNODATA
SHOW
SHOW{SCHEMAS|TABLES[FROM]|COLUMNSFROM[FROM]}列出SCHEMAS列表,表列表,表的字段列表。
例子如下:
SHOWTABLES
ALTERINDEXRENAME
ALTERINDEXRENAMETO重命名一个索引,这个语句提交一个打开的事务。
例子如下:
ALTERINDEXIDXNAMERENAMETOIDX_TEST_NAME
ALTERSEQUENCE
ALTERSEQUENCE[RESTARTWITH][INCREMENTBY]改变自增序列的下一个值,这个语句不提交当前的事务,但是其他事务能立即获得新值,即使回滚当前的事务,这个语句不受影响。
例子如下:
ALTERSEQUENCESEQ_IDRESTARTWITH1000
ALTERTABLEADD
ALTERTABLEADD[DEFAULT][[NOT]NULL][AUTO_INCREMENT|IDENTITY][BEFORE]增加一个新的列到表中,这个语句提交一个打开的事务。
例子如下:
ALTERTABLETESTADDCREATEDATETIMESTAMP
ALTERTABLEADDCONSTRAINT
ALTERTABLEADD[CHECK|NOCHECK]增加一个约束到表中。如果NOCHECK被指定,已经存在的行将不被检查一致性(默认情况下是检查已存在行的一致性的)。如果被需要的索引不存在,将自动创建索引,但是不可能去屏蔽唯一性检查。这个语句提交一个打开的事务。
例子如下:
ALTERTABLETESTADDCONSTRAINTNAME_UNIQUEUNIQUE(NAME)
ALTERTABLEALTER
ALTERTABLEALTERCOLUMN{{[DEFAULT][[NOT]NULL][AUTO_INCREMENT|IDENTITY]}|{RENAMETO}|{RESTARTWITH}|{SELECTIVITY}|{SETDEFAULT}|{SETNULL}|{SETNOTNULL}}改变列的数据类型,重命名列名,改变标识符值,改变优化选项。
如果数据不能被转换,数据类型的改变将失败。
RESTART改变一个自增列的下一个值,这个字段必须已经是一个自增列,对于RESTART,遵守与ALTERSEQUENCE相同的事务规则。
SELECTIVITY设置字段的优化选项,0为优化选项的默认值,SELECTIVITY用于基于成本优化器去计算一个索引的开销估算,SELECTIVITY设置为100意味着是列上的值都是唯一的,10意味着平均每10次就会有相同的值出现。
SETDEFAULT改变列的默认值。
SETNULL设置允许这个列为NULL,行不能是主键或复合HASH索引的一部分,这个字段上的单列索引被移去。
SETNOTNULL设置字段不允许为空,行不允许包含为NULL的字段。
这个语句提交一个打开的事务。
例子如下:
ALTERTABLETESTALTERCOLUMNNAMECLOB;
ALTERTABLETESTALTERCOLUMNNAMERENAMETOTEXT;
ALTERTABLETESTALTERCOLUMNIDRESTARTWITH10000;
ALTERTABLETESTALTERCOLUMNNAMESELECTIVITY100;
ALTERTABLETESTALTERCOLUMNNAMESETDEFAULT'';
ALTERTABLETESTALTERCOLUMNNAMESETNOTNULL;
ALTERTABLETESTALTERCOLUMNNAMESETNULL;
ALTERTABLEDROPCOLUMN
ALTERTABLEDROPCOLUMN从表中删除一列,这个语句提交一个打开的事务。
例子如下:
ALTERTABLETESTDROPCOLUMNNAME
ALTERTABLEDROPCONSTRAINT
ALTERTABLEDROP{CONSTRAINT[IFEXISTS]|PRIMARYKEY}从表中删除一个约束或主键,这个语句提交一个打开的事务。
例子如下:
ALTERTABLETESTDROPCONSTRAINTUNIQUE_NAME
ALTERTABLESET
ALTERTABLESETREFERENTIAL_INTEGRITY{FALSE|TRUE[CHECK|NOCHECK]}屏蔽或启用表的参照完整性,这个语句使用内部事务,启用参照完整性并不检查已存在的数据,除非CHECK被指定。使用SETREFERENTIAL_INTEGRITY可以屏蔽所有表的参照完整性。全局标志和每个表的独立标志都被支持。
这个语句提交一个打开的事务。
例子如下:
ALTERTABLETESTSETREFERENTIAL_INTEGRITYFALSE
ALTERTABLERENAME
ALTERTABLERENAMETO重命名表名,这个语句提交一个打开的事务。
例子如下:
ALTERTABLETESTRENAMETOMY_DATA
ALTERUSERADMIN
ALTERUSERADMIN{TRUE|FALSE}切换用户的管理员标志。
只有加引号或是大写的用户名被允许,执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
ALTERUSERTOMADMINTRUE
ALTERUSERRENAME
ALTERUSERRENAMETO重命名用户名,在重命名用户名后,密码变成无效,也需要被重置后才能使用。
仅加引号或大写的用户名被允许,执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
ALTERUSERTOMRENAMETOTHOMAS
ALTERUSERSETPASSWORD
ALTERUSERSET{PASSWORD|SALTHASH}
改变用户的密码,仅加引号或大写的用户名被允许,密码必须使用单引号引用,密码是区分大小写的并且允许包含空格,种子(SALT)和HASH串使用16进制字符串。执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
ALTERUSERSASETPASSWORD'rioyxlgt'
ALTERVIEW
ALTERVIEWRECOMPILE基础表被修改或创建后,重新编译视图。这个语句提交一个打开的事务。
例子如下:
ALTERVIEWADDRESS_VIEWRECOMPILE
ANALYZE
ANALYZE[SAMPLE_SIZE]更新所有表的优化选项统计数据,基于成本的优化器使用优化选项选择一个给定查询的最佳索引,如果SAMPLE_SIZE未设置,每张表达到10000行数据被读取,设置值0意味着所有的行都被读取,
这个优化选项可以通过手工设置,使用语句ALTERTABLEALTERCOLUMNSELECTIVITY,手工设
置的值将被这个语句覆盖,优化选择可以在表INFORMATION_SCHEMA.COLUMNS中查询到。
这个语句提交一个打开的事务。
例子如下:
ANALYZESAMPLE_SIZE1000
COMMENT
COMMENTON
{{COLUMN[]}
|{{TABLE|VIEW|CONSTANT|CONSTRAINT|ALIAS|INDEX|ROLE
|SCHEMA|SEQUENCE|TRIGGER|USER|DOMAIN}[]}}IS设置数据库对象的注释,设置为NULL将删除注释。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
COMMENTONTABLETESTIS'Tableusedfortesting'
CREATEAGGREGATE
CREATEAGGREGATE[IFNOTEXISTS]FOR创建一个新的用户定义聚合方法,该方法的名称必须是完整的限定类名,类必须实现接口
org.h2.api.AggregateFunction.
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
CREATEAGGREGATEMEDIANFOR"com.acme.db.Median"
CREATEALIAS
CREATEALIAS[IFNOTEXISTS][DETERMINISTIC]{FOR|AS}创建方法的新的别名,确定的方法对于同样的参数返回同样的值,如此方法的结果将可能被缓冲。
该方法名必须是完整的限定类和方法的名称,可能的选项包含在参数类中(如
"java.lang.Integer.parseInt(java.lang.String,int)")。类和方法都必须是public的,方法必须是static的,类必须包含在数据库引擎的classpath中(如果是服务器模式,它必须包含在服务器的classpath中)。
当定义方法的别名使用的是源代码时,如果tools.jar在classpath中,将使用SUN的javac进行编译。否则,javac作为一个单独的进程启动。如果源代码存储在数据库中,在数据库每次被重新打开时,类都会被重新编译,源代码通常使用美元符号引用文本,避免出现退出问题。
如果JAVA方法的第一个参数是java.sql.Connection,数据连接将被自动提供,这个连接不能被关闭,如果类包含多个方法,方法名相同但是参数数量不同,所有的方法都被映射。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
CREATEALIASMY_SQRTFOR"java.lang.Math.sqrt";
CREATEALIASGET_SYSTEM_PROPERTYFOR"java.lang.System.getProperty";
CALLGET_SYSTEM_PROPERTY('java.class.path');
CALLGET_SYSTEM_PROPERTY('com.acme.test','true');
CREATEALIASREVERSEAS$Stringreverse(Strings){returnStringBuilder(s).reverse().toString();}$;
CALLREVERSE('Test');
new
CREATECONSTANT
CREATECONSTANT[IFNOTEXISTS]VALUE创建一个新的常量。这个语句提交一个打开的事务。
例子如下:
CREATECONSTANTONEVALUE1
CREATEDOMAIN
CREATEDOMAIN[IFNOTEXISTS]AS[DEFAULT][[NOT]NULL][SELECTIVITY][CHECK]创建一个新的数据类型(DOMAIN),校验条件必须等于true或者NULL(要避免NULL,可以使用NOTNULL),在这个条件下,VALUE的值将参照被测试过的值。
这个语句提交一个打开的事务。
例子如下:
CREATEDOMAINEMAILASVARCHAR(255)CHECK(POSITION('@',VALUE)>1)
CREATEINDEX
CREATE{[UNIQUE][HASH]INDEX[IFNOTEXISTS]
|PRIMARYKEY[HASH]}ON([,...])创建一个新的索引。这个语句提交一个打开的事务。
例子如下:
CREATEINDEXIDXNAMEONTEST(NAME)
CREATELINKEDTABLE
CREATE[[GLOBAL|LOCAL]TEMPORARY]LINKEDTABLE[IFNOTEXISTS]([])[EMITUPDATES|READONLY]创建一张外部表的表链接,如果驱动已经被加载,驱动名可以为空,如果SCHEMA名没被设置,该表名仅有一张表存在于目标数据库中。
通常,对于更新语句,旧的行先被删除,新行才能被插入。执行UPDATE语句是可以的(除rollback外),然而,多行唯一键更新并不总能工作,多个连接到同一个数据库的连接表共享一个连接。
如果用一个查询替代普通的表名,这张表是只读的,查询语句必须被括号引用,如(SELECT
*FROMORDERS)。
使用JNDI获取连接时,驱动类必须是javax.naming.Context(例如
javax.naming.InitialContext),URL必须是资源名(如java:comp/env/jdbc/Test)。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
CREATELINKEDTABLELINK('org.h2.Driver','jdbc:h2:test2','sa','sa','TEST');
CREATELINKEDTABLELINK('','jdbc:h2:test2','sa','sa',
'(SELECT*FROMTESTWHEREID>0)');
CREATELINKEDTABLELINK('javax.naming.InitialContext',
'java:comp/env/jdbc/Test',NULL,NULL,'(SELECT*FROMTESTWHEREID>0)');
CREATEROLE
CREATEROLE[IFNOTEXISTS]创建一个新的角色。这个语句提交一个打开的事务。
例子如下:
CREATEROLEREADONLY
CREATESCHEMA
CREATESCHEMA[IFNOTEXISTS][AUTHORIZATION]创建一个新的SCHEMA,如果没有所有人被指定,当前用户将被使用,执行这个命令的用户必须拥有管理员权限,也就是只有管理员才能作为所有者。
这个语句提交一个打开的事务。
例子如下:
CREATESCHEMATEST_SCHEMAAUTHORIZATIONSA
CREATESEQUENCE
CREATESEQUENCE[IFNOTEXISTS][STARTWITH][INCREMENTBY][CACHE]创建一个新的序列,序列的数据类型是BIGINT,已经被使用的值永远都不能重复使用,即使事务被回滚。序列数已经被事先分配到缓冲中,如果系统在未正常关闭前崩溃,缓冲中的这些数的大部分都会丢失,默认的缓冲尺寸大小是32。
这个语句提交一个打开的事务。
例子如下:
CREATESEQUENCESEQ_ID
CREATETABLE
CREATE[CACHED|MEMORY|TEMP|[GLOBAL|LOCAL]TEMPORARY]
TABLE[IFNOTEXISTS]
{{({|}[,...])[AS]}
|{AS}}[NOTPERSISTENT]
创建一张新表。
缓冲(CACHED)表(默认)是持久性的,行数并不受限于主内存,内存(MEMORY)表是持久的,但是索引数据是保存在主内存中,那意味着内存表并能太大。
NOTPERSISTENT指定表将全部保存在内存中(非持久性),当数据库关闭时,所有的行将都丢失。临时表是非持久性的,临时表可以是全局的(所有连接都可以访问),也可以是局部的(仅当前连接可以访问),默认设置下的临时表是全局的。
这个语句提交一个打开的事务。
例子如下:
CREATETABLETEST(IDINTPRIMARYKEY,NAMEVARCHAR(255))
CREATETRIGGER
CREATETRIGGER[IFNOTEXISTS]{BEFORE|AFTER}{INSERT|UPDATE|DELETE|SELECT}[,...]ON[FOREACHROW][QUEUE][NOWAIT]CALL创建一个新的触发器。触发器类必须是public的,内部类(Nested和inner)都不被支持。类必须包含在数据库引擎的classpath中(当使用服务器模式时,它必须包含在服务器的
classpath中)。
在触发器被调用之前,数据已经转换,缺省值已经被设置,NULL和长度限制检查已经完成,但是其他约束检查还未进行。
MERGE语句将调用INSERT和UPDATE触发器,带着选项FOREACHROW和AFTER
SELECT的SELECT触发器并不被支持。
在一个触发器里提交或回滚事务是不允许的,除了SELECT触发器。
这个语句提交一个打开的事务。
例子如下:
CREATETRIGGERTRIG_INSBEFOREINSERTONTESTFOREACHROWCALL
"MyTrigger"
CREATEUSER
CREATEUSER[IFNOTEXISTS]{PASSWORD|SALTHASH}[ADMIN]创建一个新的用户,为了兼容性,仅引号引起的或大写的用户名被允许,密码必须是单引号引起的,它是区分大小写和可以包含空格的,种子(SALT)和HASH值使用16进制字符串。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
CREATEUSERGUESTPASSWORD'abc'
CREATEVIEW
CREATE[FORCE]VIEW[IFNOTEXISTS][([,...])]AS创建一个新的视图,如果FORCE选项被使用,即使基本表不存在,视图也能被创建。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
CREATEVIEWTEST_VIEWASSELECT*FROMTESTWHEREID<100
DROPAGGREGATE
DROPAGGREGATE[IFEXISTS]删除一个存在的用户自定义聚合方法。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
CREATEAGGREGATEMEDIAN
DROPALIAS
DROPALIAS[IFEXISTS]删除一个存在的方法别名。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
CREATEALIASMY_SQRT
DROPALLOBJECTS
DROPALLOBJECTS[DELETEFILES]删除所有存在的视图、表、序列、SCHEMAS、方法别名、角色、用户自定义聚合方法、用户自定义类型(DIMAIN)和用户(除了当前用户)。如果DELETEFILES被指定,当最后用户从数据库连接断开时,数据库文件将被删除。警告:这个语句不能被回滚。
执行这个语句需要管理员权限。
例子如下:
DROPALLOBJECTS
DROPCONSTANT
DROPCONSTANT[IFEXISTS]删除一个约束。这个语句提交一个打开的事务。
例子如下:
DROPCONSTANTONE
DROPDOMAIN
DROPDOMAIN[IFEXISTS]删除一个数据类型(DOMAIN)。这个语句提交一个打开的事务。
例子如下:
DROPDOMAINEMAIL
DROPINDEX
DROPINDEX[IFEXISTS]删除一个索引。这个语句提交一个打开的事务。
例子如下:
DROPINDEXIFEXISTSIDXNAME
DROPROLE
DROPROLE[IFEXISTS]删除一个角色。这个语句提交一个打开的事务。
例子如下:
DROPROLEREADONLY
DROPSCHEMA
DROPSCHEMA[IFEXISTS]删除一个SCHEMA。这个语句提交一个打开的事务。
例子如下:
DROPSCHEMATEST_SCHEMA
DROPSEQUENCE
DROPSEQUENCE[IFEXISTS]删除一个序列。这个语句提交一个打开的事务。
例子如下:
DROPSEQUENCESEQ_ID
DROPTABLE
DROPTABLE[IFEXISTS][,...]删除一个存在的表,或者是一个存在表的列表。这个语句提交一个打开的事务。
例子如下:
DROPTABLETEST
DROPTRIGGER
DROPTRIGGER[IFEXISTS]删除一个存在的触发器。这个语句提交一个打开的事务。
例子如下:
DROPTRIGGERTRIG_INS
DROPUSER
DROPUSER[IFEXISTS]删除一个用户,当前用户不能被删除,为了兼容性,仅引号引用的或大写的用户名被允许。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
DROPUSERTOM
DROPVIEW
DROPVIEW[IFEXISTS]删除一个视图。这个语句提交一个打开的事务。
例子如下:
DROPVIEWTEST_VIEW
TRUNCATETABLE
TRUNCATETABLE删除一张表的全部行,相比不带条件的DELETEFROM语句,这个语句不能被回滚,这个语句也比不带条件的DELETE语句更快,仅普通的不带外键约束的数据包可以被TRUNCATE。
这个语句提交一个打开的事务。
例子如下:
TRUNCATETABLETEST
CHECKPOINT
CHECKPOINT刷新日志和数据文件,如果可能将切换一个新的日志文件。
执行这个语句需要管理员权限。
例子如下:
CHECKPOINT
CHECKPOINTSYNC
CHECKPOINTSYNC刷新日志、数据和索引文件,强制所有的系统缓冲写入到物理设置。
执行这个语句需要管理员权限。
例子如下:
CHECKPOINTSYNC
COMMIT
COMMIT[WORK]提交一个事务。
例子如下:
COMMIT
COMMITTRANSACTION
COMMITTRANSACTION设置一个存疑事务的决议为提交。
执行这个语句需要管理员权限,这个语句是2阶段提交协议的一部分。
例子如下:
COMMITTRANSACTIONXID_TEST
GRANTRIGHT
GRANT{SELECT|INSERT|UPDATE|DELETE|ALL}[,...]ON[,...]TO{PUBLIC||}将一张表授权给用户或角色。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
GRANTSELECTONTESTTOREADONLY
GRANTROLE
GRANTTO{PUBLIC||}将一个角色授权给用户或角色。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
GRANTREADONLYTOPUBLIC
HELP
HELP[anything[...]]显示SQL语句或关键字的帮助页
例子如下:
HELPSELECT
PREPARECOMMIT
PREPARECOMMIT预提交一个事务,这个语句是2阶段提交协议的一部分。
例子如下:
PREPARECOMMITXID_TEST
REVOKERIGHT
REVOKE{SELECT|INSERT|UPDATE|DELETE|ALL}[,...]ON[,...]FROM{PUBLIC||}从一个用户或角色处收回一张表的权限
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
REVOKESELECTONTESTFROMREADONLY
REVOKEROLE
REVOKEFROM{PUBLIC||}从一个用户或角色收回一个角色的权限。
执行这个语句需要管理员权限,这个语句提交一个打开的事务。
例子如下:
REVOKEREADONLYFROMTOM
ROLLBACK
ROLLBACK[TOSAVEPOINT]回滚一个事务,如果一个SAVEPOINT名被使用,事务将仅回滚到指定的SAVEPOINT。
例子如下:
ROLLBACK
ROLLBACKTRANSACTION
ROLLBACKTRANSACTION设置一个存疑事务的决议为回滚。
执行这个语句需要管理员权限,这个语句是2阶段提交协议的一部分。
例子如下:
ROLLBACKTRANSACTIONXID_TEST
SAVEPOINT
SAVEPOINT创建一个新的SAVEPOINT,参见ROLLBACK,SAVEPOINT仅在事务被提交或回滚之前才有效。
例子如下:
SAVEPOINTHALF_DONE
SET@
SET[=]设置一个用户自定义变量,这个语句并不提交一个事务,事务回滚也不影响它。
例子如下:
SET@TOTAL=0
SETALLOW_LITERALS
SETALLOW_LITERALS{NONE|ALL|NUMBERS}这个设置能帮助解决SQL注入问题,默认情况下,文本和数字文字允许被拼接到SQL语句中,然而,应用动态拼接SQL语句将会存在SQL注入的问题,如果使用参数parameters('?')就不会出现SQL注入的问题。
NONE意味着任何类型的文字都不被允许参与拼接,仅参数和常数被允许。NUMBERS意味着仅数字和布尔型被允许拼接。ALL意味着所有类型的文字都可以参与拼接(默认)。
参见CREATECONSTANT.
执行这个语句需要管理员权限,这个语句提交一个打开的事务。这个设置是持久化的,这个设置也能通过追加数据库URL来实现,如:jdbc:h2:test;ALLOW_LITERALS=NONE
例子如下:
SETALLOW_LITERALSNONE
SETAUTOCOMMIT
SETAUTOCOMMIT{TRUE|ON|FALSE|OFF}切换自动提交开关。这个设置可以通过追加数据库URL来实现,如URL:
jdbc:h2:test;AUTOCOMMIT=OFF
例子如下:
SETAUTOCOMMITOFF
SETCACHE_SIZE
SETCACHE_SIZE设置缓冲的尺寸,单位为KB(每KB为1024字节)。默认值为16384(16MB)。这个值四舍五入到更高的性能上,实际的值依赖虚拟机,可能比设置值更高。
这个设置是持久性的,影响所有的连接,因为每个数据库只有一个缓冲。这个设置仅影响数据库引擎(即使数据库在客户端/服务器模式下)。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的,这个设置也能通过追加数据库URL来实现,如:URL:jdbc:h2:test;CACHE_SIZE=8192
例子如下:
SETCACHE_SIZE8192
SETCLUSTER
SETCLUSTER这个语句不能被直接使用在应用中,这个语句是由系统自动执行的,该行为可以会将在将来的版本中改变。该命令就是用来设置集群服务器列表,一个空的字符串将关闭集群模式。切换集群模式,需要管理员权限,但是任何用都能关闭集群模式(这是自动完成的,当客户端检测到另一个服务器没有响应时)。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。
例子如下:
SETCLUSTER''
SETCOLLATION
SET[DATABASE]COLLATION
{OFF|[STRENGTH{PRIMARY|SECONDARY|TERTIARY|
IDENTICAL}]}设置字符串比较的规则,这个语句仅能在没有表被定义前被执行。关于STRENGTH跟过请参见java.text.Collator。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久性的。
例子如下:
SETCOLLATIONENGLISH
SETCOMPRESS_LOB
SETCOMPRESS_LOB{NO|LZF|DEFLATE}设置BLOB和CLOB数据的压缩算法。压缩通常是缓慢的,但是需要更少的磁盘空间,LZF更快,但是需要使用更多的空间。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久性的。
例子如下:
SETCOMPRESS_LOBLZF
SETDATABASE_EVENT_LISTENER
SETDATABASE_EVENT_LISTENER设置事件监听类,一个空的字符串('')意味着没有设置监听。这个设置不是持久性的。
执行这个语句需要管理员权限,除非是打开数据库时它被设置(在这种情况下,在打开数据库之后立即就被重置),这个设置能被追加到数据库URL:
jdbc:h2:test;DATABASE_EVENT_LISTENER='sample.MyListener'
例子如下:
SETDATABASE_EVENT_LISTENER'sample.MyListener'
SETDB_CLOSE_DELAY
SETDB_CLOSE_DELAY
设置关闭所有的连接后数据关闭时的延迟,值-1意味着数据库不会关闭,直到关闭延迟被设置为其他值或是SHUTDOWN被调用。值0意味着没有延迟(缺省值,当数据库最后一个连接被关闭时,数据库将被立即关闭),值1或更大的值表示在关闭最后的连接后数据库关闭之前等待的秒数。
如果应用正常退出,或是System.exit被调用,数据库将立即被关闭,即使延迟被设置了。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的,这个设置也能通过追加数据库URL来实现,如:URL:jdbc:h2:test;DB_CLOSE_DELAY=-1
例子如下:
SETDB_CLOSE_DELAY-1
SETDEFAULT_LOCK_TIMEOUT
SETDEFAULTLOCK_TIMEOUT设置数据库一个新的SESSION的默认锁超时时间(毫秒数),这个值的默认设置为1000(一秒)。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETDEFAULT_LOCK_TIMEOUT5000
SETDEFAULT_TABLE_TYPE
SETDEFAULT_TABLE_TYPE{MEMORY|CACHED}设置创建新表时的默认表存储类型。MEMORY表全部保存在主内存中(包括索引),然而,数据的改变被存储在日志文件中,内存表的大小受限于内存。默认设置为CACHED。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETDEFAULT_TABLE_TYPEMEMORY
SETEXCLUSIVE
SETEXCLUSIVE{TRUE|FALSE}切换数据库的独占模式,在独占模式下,新的连接都被拒绝,其他连接的操作都被暂停,直到独占模式被解除,也只有设置独占模式的连接能解除独占模式,当这个连接关闭时,独占模式将自动被解除。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETEXCLUSIVETRUE
SETIGNORECASE
SETIGNORECASE{TRUE|FALSE}设置IGNORECASE为TRUE,新创建的表的文本字段将是忽略大小写的,已经存在的表将不受影响。忽略大小写的字段在使用STRENGTHPRIMARY排序规则时,受到同样的影响。忽略大小写的字段在进行比较时比普通规则更快。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETIGNORECASETRUE
SETLOCK_MODE
SETLOCK_MODE设置锁模式,值0,1,2,和3被支持。默认值为3(READ_COMMITTED)。这项设置将影响所有的连接。
值0意味着不锁定(只用于测试,也被称为READ_UNCOMMITTED)。注意的是使用SET
LOCK_MODE0时,当有多个连接操作数据库时,可能会引发事务不一致。
值1意味着表级锁(也被称为SERIALIZABLE)。
值2意味着带垃圾收集的表级锁(如果应用退出后没有关闭连接,将自动关闭所有的连接)。
值3意味着表级锁,但是读锁将被立即释放(这是默认值,也被称为READ_COMMITTED)。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。这个设置也能通过追加数据库URL来实现,如URL:jdbc:h2:test;LOCK_MODE=3
例子如下:
SETLOCK_MODE1
SETLOCK_TIMEOUT
SETLOCK_TIMEOUT设置当前SESSION的锁超时时间(毫秒数),设置的缺省值为1000(一秒)。
这个语句并不提交一个事务,事务回滚也不影响它。这个设置也能通过追加数据库URL来实现,如URL:jdbc:h2:test;LOCK_TIMEOUT=10000
例子如下:
SETLOCK_TIMEOUT1000
SETLOG
SETLOG打开或屏蔽写事务日志文件,值0,1,和2被支持。
0意味着日志被屏蔽掉(更快)。1意味着数据日志被记录,但是索引改变日志被屏蔽(缺省)。2意味着数据和索引改变日志都被记录。
当耐久性不重要时,事务日志被屏蔽掉能提升性能。例如在运行测试和加载数据时。警告:如果日志被屏蔽掉时,而应用非正常终止,数据库这时是不能被恢复的。如果索引改变日志被记录,打开一个崩溃的数据库将更快,因为索引不需要重建。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置也能通过追加数据库URL来实现,如URL:jdbc:h2:test;LOG=2
例子如下:
SETLOG0
SETMAX_LENGTH_INPLACE_LOB
SETMAX_LENGTH_INPLACE_LOB设置一个就地存储的LOB对象的最大尺寸,LOB对象大于这个尺寸时存储在一个单独的文件,否则,直接存储在数据库中(就地)。默认值为1024。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETMAX_LENGTH_INPLACE_LOB128
SETMAX_LOG_SIZE
SETMAX_LOG_SIZE设置日志文件的最大尺寸,单位为MB。如果文件尺寸超过了这个限制,将创建一个新的文件,旧的文件将被自动删除(旧文件不能用于恢复),但是允许多个日志文件存在,默认的最大尺寸是32MB。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETMAX_LOG_SIZE2
SETMAX_MEMORY_ROWS
SETMAX_MEMORY_ROWS设置最大的内存中保存的结果集的行数,如果更多的行需要被读,行将被缓冲到磁盘上。缺省值为10000。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETMAX_MEMORY_ROWS1000
SETMAX_MEMORY_UNDO
SETMAX_MEMORY_UNDO设置每个SESSION保存在内存中的最大UNDO记录数,如果事务要缓冲更多的UNDO记录,记录将被缓冲到磁盘上,缺省值为50000。非主键的表改变不能缓冲到磁盘上,这个设置并不能支持多版本并发。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置是持久化的。
例子如下:
SETMAX_MEMORY_UNDO1000
SETMAX_OPERATION_MEMORY
SETMAX_OPERATION_MEMORY设置大操作(DELETE和INSERT)使用的最大内存,单位为字节数。操作需要更多的内存时,将缓冲到磁盘,操作的性能将下降。缺省值为100000。0意味着没有限制。
这项设置不是持久化的。执行这个语句需要管理员权限。这个设置也能通过追加数据库URL来实现,如URL:jdbc:h2:test;MAX_OPERATION_MEMORY=10000
例子如下:
SETMAX_OPERATION_MEMORY0
SETMODE
SETMODE{REGULAR|DB2|DERBY|HSQLDB|MSSQLSERVER|MYSQL|ORACLE|POSTGRESQL}改变数据库的兼容模式。关于兼容模式,请参考特征中的兼容模式一节。
T这项设置不是持久化的。执行这个语句需要管理员权限。这个语句提交一个打开的事务。
这个设置也能通过追加数据库URL来实现,如URL:jdbc:h2:test;MODE=MYSQL
例子如下:
SETMODEHSQLDB
SETMULTI_THREADED
SETMULTI_THREADED{0|1}设置在数据引擎内部是否使用多线程,1为允许,0为禁止。默认情况下,设置为禁止。当前允许多线程只是在实验室状态下。
这是一项全局设置,也就是说它是不可能在同一个虚拟机里同时打开不同模式的多个数据
库。这项设置不是持久化的,然而这个值一直保持知道虚拟机退出或是主动去改变它。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置也能通过追加数据库URL来实现,如URL:jdbc:h2:test;MULTI_THREADED=1
例子如下:
SETMULTI_THREADED1
SETOPTIMIZE_REUSE_RESULTS
SETOPTIMIZE_REUSE_RESULTS{0|1}允许(1)或禁止(0)结果集重用的性能优化。如果允许,子查询或视图只有在数据发生变化时才进行重新查询,这个选项缺省状态是允许的。
执行这个语句需要管理员权限。这个语句提交一个打开的事务。这个设置也能通过追加数据库URL来实现,如URL:jdbc:h2:test;OPTIMIZE_REUSE_RESULTS=0
例子如下:
SETOPTIMIZE_REUSE_RESULTS0
SETPASSWORD
SETPASSWORD改变当前用户的密码,密码必须是被引号所引用,它是区分大小写的并且允许空格。
这个语句提交一个打开的事务。
例子如下:
SETPASSWORD'abcstzri!.5'
SETQUERY_TIMEOUT
SETQUERY_TIMEOUT设置当前SESSION的查询超时时间为给定的值,单位为毫秒,所有语句在执行时如果比给定的值消耗更多的时间将抛出异常。缺省值为0,表示没有超时。
这个语句并不提交事务,即使事务回滚也不影响它。
例子如下:
SETQUERY_TIMEOUT10000
SETREFERENTIAL_INTEGRITY
SETREFERENTIAL_INTEGRITY{TRUE|FALSE}禁用或启用整个数据库的参照完整性检查。启用时,它并不检查已经存在的数据。使用
ALTERTABLESET可以修改一张表的参照完整性检查。
该项设置不是持久性的,这个语句提交一个打开的事务,执行这条语句需要管理员权限。
例子如下:
SETREFERENTIAL_INTEGRITYFALSE
SETSALTHASH
SETSALTHASH设置当前用户的密码种子和HASH。密码必须使用单引号引起,它是区分大小写和允许包含空格的。
这个语句提交一个打开的事务。
例子如下:
SETSALT'00'HASH'1122'
SETSCHEMA
SETSCHEMA改变当前连接的缺省SCHEMA。缺省SCHEMA在没有明确指定SCHEMA的情况下被用于语句中。对一个新连接,缺省的SCHEMA为PUBLIC。
这个语句并不提交一个事务,事务回滚也不会影响它,该项设置可以通过追加数据库URL
来实现,如URL:jdbc:h2:test;SCHEMA=ABC
例子如下:
SETSCHEMAINFORMATION_SCHEMA
SETSCHEMA_SEARCH_PATH
SETSCHEMA_SEARCH_PATH[,...]改变当前连接的SCHEMA搜索路径。缺省SCHEMA在没有明确指定SCHEMA的情况下被用于语句中。对一个新连接,缺省的SCHEMA为PUBLIC。
这个语句并不提交一个事务,事务回滚也不会影响它,该项设置可以通过追加数据库URL来实现,如URL:jdbc:h2:test;SCHEMA_SEARCH_PATH=ABC,DEF
例子如下:
SETSCHEMA_SEARCH_PATHINFORMATION_SCHEMA,PUBLIC
SETTHROTTLE
SETTHROTTLE设置当前连接的风门,单位是每50毫秒后延迟的毫秒数,缺省值为0(风门被禁止)。
这个语句并不提交一个事务,事务回滚也不会影响它,该项设置可以通过追加数据库URL来实现,如URL:jdbc:h2:test;THROTTLE=50
例子如下:
SETTHROTTLE200
SETTRACE_LEVEL
SET{TRACE_LEVEL_FILE|TRACE_LEVEL_SYSTEM_OUT}设置系统的跟踪文件和系统输出(systemoutstream)的跟踪级别,级别分别为:0=off,1=error,
2=info,3=debug。默认情况下,跟踪文件的基本为1,系统输出的级别为0,如果使用SLF4J,可以在打开数据库时追加;TRACE_LEVEL_FILE=4到数据库URL中。
这项设置不是持久性的,执行这个语句需要管理员权限,这个语句并不提交事务,事务回滚并不影响它,这项设置也可以通过追加数据库URL来实现,如URL:
jdbc:h2:test;TRACE_LEVEL_SYSTEM_OUT=3
例子如下:
SETTRACE_LEVEL_SYSTEM_OUT3
SETTRACE_MAX_FILE_SIZE
SETTRACE_MAX_FILE_SIZE设置跟踪文件的最大尺寸,如果文件超过这个限制,文件被重命名为.old文件,一个新文件将被创建,如果另一个.old文件存在,它将被删除。缺省的最大尺寸为16MB。
这项设置是持久性的,执行这个语句需要管理员权限,这个语句提交一个打开的事务,这项设置也可以通过追加数据库URL来实现,如URL:jdbc:h2:test;TRACE_MAX_FILE_SIZE=3
例子如下:
SETTRACE_MAX_FILE_SIZE10
SETUNDO_LOG
SETUNDO_LOG设置每SESSION的UNDO日志是否启用,启用为1,禁止为0,UNDO日志默认状态下是启用。当设置为禁止时,事务不能被回滚,这项设置仅适合在大批量操作并且不要求操作的原子性的情况下。
这个语句提交一个打开的事务。
例子如下:
SETUNDO_LOG0
SETWRITE_DELAY
SETWRITE_DELAY设置提交和刷新日志之间的最大延迟,单位为毫秒,这项设置是持久性的,缺省为500毫秒。
执行这个语句需要管理员权限,这个语句提交一个打开的事务,这项设置也可以通过追加数据库URL来实现,如URL:jdbc:h2:test;WRITE_DELAY=0
例子如下:
SETWRITE_DELAY2000
SHUTDOWN
SHUTDOWN[IMMEDIATELY|COMPACT]这个语句关闭所有已经打开的连接,并关闭数据库。这个语句通常不需要去执行,当数据库最后一个连接关闭时,系统会自动关闭数据库。
如果没有选项被使用,数据库将正常关闭,所有的连接都被关闭,打开的事务将被回滚。
COMPACT选项将压缩整个数据库。IMMEDIATELY选项将不做任何清理工作直接关闭所有的文件。
执行这个语句需要管理员权限。
例子如下:
SHUTDOWNCOMPACT
Alias
一个名字的别名,只在声明范围内有效。
例子如下:
A
AndCondition
[{AND}[...]]
值或条件。
例子如下:
ID=1ANDNAME='Hi'
Array
([,...])值的数组。
例子如下:
(1,2)
Boolean
TRUE|FALSE一个布尔值。
例子如下:
TRUE
Bytes
X'hex'十六进制表示的值,十六进制值不区分大小写。
例子如下:
X'01FF'
Case
CASE{WHENTHEN}[...][ELSE]END返回满足第一个条件(表达式)的值(表达式),如果全部条件都不满足,返回ELSE指定的值(表达式),如果没有ELSE指定,返回NULL。
例子如下:
CASECNTWHEN0THEN'No'WHEN1THEN'One'ELSE'Some'END
CaseWhen
CASE{WHENTHEN[...][ELSE]END返回第一个条件(表达式)为真的值(表达式),如果全部条件都不满足,返回ELSE指定的值(表达式),如果没有ELSE指定,返回NULL。
例子如下:
CASEWHENCNT<10THEN'Low'ELSE'High'END
Cipher
{AES|XTEA}两种加密算法被支持:AES(AES-256)和XTEA(using32rounds)。AES算法大约只有
XTEA速度的一半。
例子如下:
AES
ColumnDefinition
{DEFAULT|AS}[[NOT]NULL][{AUTO_INCREMENT|IDENTITY}[([,])]][SELECTIVITY][PRIMARYKEY[HASH]|UNIQUE]DEFAULT是在当增加一行时,没指定具体的值,这个值将被赋予给这个字段。计算列(computedColumnExpression)在行改变时都会进行重新计算和赋值。
IDENTITY和AUTO_INCREMENT字段默认情况下都被作为一个序列字段,声明为IDENTITY的字段在表中将作为一个隐式的主键(不同于一般的自增列)。
例子如下:
CREATETABLETEST(IDINTPRIMARYKEY,NAMEVARCHAR(255)DEFAULT'');
CREATETABLETEST(IDBIGINTIDENTITY);
CREATETABLETEST(QUANTITYINT,PRICEDECIMAL,AMOUNTDECIMALAS
QUANTITY*PRICE);
Comments
--anything|//anything|/*anything*/注释能被用于数据库语句的任何地方。行注释依赖换行符结束,块注释不能嵌套,但可以和多行注释一起使用。
例子如下:
//Thisisacomment
Compare
<>|<=|>=|=|<|>|!=比较操作符,操作符!=和<>等效。
例子如下:
<>
Condition
[]|NOT|EXISTS()布尔值或条件。
例子如下:
ID<>2
ConditionRightHandSide
{{{ALL|ANY|SOME}()}|}|IS[NOT]NULL|BETWEENAND|IN({|[,...]})|[NOT]LIKE[ESCAPE]|[NOT]REGEXP右侧条件。
当使用LIKE比较时,可以使用通配符_(任何一个字符)和%(任意多个字符)。数据库使用LIKE做比较时,除了使用通配符的操作串外都使用索引进行比较。要检索字符%和_时,需要使用转义符,默认的转义符为\(反斜杠)。要设置不用转义符,使用语句ESCAPE
''(空串),最多一个转义字符能被设置。每个转义符后面的字符都需要被准确的匹配,模式匹配串以转义符结束时无效的,表达式将返回NULL。
当使用REGEXP比较时,正则表达式匹配规则被使用,,详细请参见JavaMatcher.find。
例子如下:
LIKE'Jo%'
Constraint
[]{CHECK|UNIQUE([,...])|}|PRIMARYKEY[HASH]([,...])定义一个约束,检查条件必须等于TRUE或是NULL(为了避免NULL,可以使用NOT
NULL)。
例子如下:
PRIMARYKEY(ID,NAME)
ConstraintNameDefinition
CONSTRAINT[IFNOTEXISTS]定义一个约束的名字。
例子如下:
CONSTRAINTCONST_ID
CsvOptions
[,[,[,[,针对CSVREAD和CSVWRITE的参数选项。
例子如下:
CALLCSVWRITE('test2.csv','SELECT*FROMTEST','UTF-8','|');
DataType
||||||||||||||||||||数据类型的定义。
例子如下:
INT
DateDATE'yyyy-MM-dd'
日期数字,它的限制等同于JAVA的数据类型java.sql.Date,单位是了兼容其他数据库,建议最小和最大年份为0001和9999。
例子如下:
DATE'2004-12-31'
Decimal
[+|-][.]固定整数位和小数位的数字。
例子如下:
-1600.05
Digit
0-9一个数字字符。
例子如下:
0
DollarQuotedString
$anything$字符串的开始和结束使用两个美元符标识,两个美元符不允许在文本中间使用,在第一组美
元符之前需要一个空格,在文本中没有转义符可以使用。
例子如下:
$John'scar$
Double
[+|-]{{[.]}|{.}}[E[+|-][...]]]限制等同于JAVA的数据类型Double.
例子如下:
-1.4e-10
Expression
[{OR}[...]]值或者条件。
例子如下:
ID=1ORNAME='Hi'
Factor
[{{*|/}}[...]]一个值或数字表达式。
例子如下:
ID*10
Hex
{{|a-f|A-F}{|a-f|A-F}}[...]数字或字节的十六进制表示,两个字符代表一个字节。
例子如下:
cafe
HexNumber
[+|-]0x用十六进制符合写的数字。
例子如下:
0xff
IndexColumn
[ASC|DESC][NULLS{FIRST|LAST}]升序或降序索引此列,通常不需要指定排序方式,然而,这种方式可以加快大型查询在该列上的排序。
例子如下:
NAME
Int
[+|-]最大整数为2147483647,最小整数为-2147483648。
例子如下:
10
Long
[+|-]长整数在-9223372036854775808和9223372036854775807之间。
例子如下:
100000
Name
{{A-Z|_}[{A-Z|_|0-9}[...]]}|名字是不区分大小写的,也没有最大长度限制。
例子如下:
TEST
Null
NULLNULL是一个没有数据类型的值,表示'unknownvalue'(未知的值)。
例子如下:
NULL
Number
[...]
数字的最大长度依赖数据类型的使用。
例子如下:
100
Operand
[{||}[...]]值或值的串联。
例子如下:
'Hi'||'Eva'
Order
{|}[ASC|DESC][NULLS{FIRST|LAST}]根据给定的字段序号或表达式对结果集进行排序,如果表达式有一个单一的参数,字段序号的值将作为这个参数的值。负的字段序号反转排序顺序。
例子如下:
NAMEDESCNULLSLAST
QuotedName
"anything"引用名是区分大小写的,并且允许包含空格,没有最大名字长度限制,两个双引号可以包含一对单引号在标识符里。
例子如下:
"FirstName"
ReferentialConstraint
FOREIGNKEY([,...])REFERENCES[][([,...])][ONDELETE{CASCADE|RESTRICT|NOACTION|SET{DEFAULT|NULL}}][ONUPDATE{CASCADE|SET{DEFAULT|NULL}}]定义一个参照约束,如果表名没有指定,同一个表将被引用。数据库不支持延迟检查,如果约束被违反,RESTRICT和NOACTION都将抛出异常。如果参照的字段没有指定,主键将被用于参照,如果需要索引,索引将自动创建。
例子如下:
FOREIGNKEY(ID)REFERENCESTEST(ID)
SelectExpression
*|[[AS]]|在SELECT语句中的表达式。
例子如下:
IDASVALUE
String
'anything'开始和结束使用单引号的字符串,两个单引号可以在一个字符串内表示一个单引号。
例子如下:
'John'‘scar'
Summand
[{{+|-}}[...]]一个值或是值表达式。
例子如下:
ID+20
TableExpression
{[]|()}[[AS]][{{LEFT|RIGHT}[OUTER]|[INNER]|CROSS|NATURAL}JOIN[ON]]表联接。联接表达式不支持CROSS和NATURAL联接。NATURAL联接将作为INNER联接处理,将自动把相同字段名字的字段作为联接条件。
例子如下:
TESTASTLEFTJOINTESTAST1ONT.ID=T1.ID
Term
||?[]|NEXTVALUEFOR|function|{-|+}|()||||值,参数可以被索引,如?1表示第一个参数。
例子如下:
'Hello'
Time
TIME'hh:mm:ss'时间文本。
例子如下:
TIME'23:59:59'
Timestamp
TIMESTAMP'yyyy-MM-ddhh:mm:ss[.nnnnnnnnn]'时间文本,限制同JAVA数据类型java.sql.Timestamp。为了兼容其他数据库,最大年份为0001和9999。
例子如下:
TIMESTAMP'2005-12-3123:59:59'
Value
|||||||||||||任何数据类型的一个值,或者为NULL。
例子如下:
10
InformationSchema
建议最小和
在SACHEMA中的表INFORMATION_SCHEMA包含了所有表的元数据以及当前的设置。
RangeTable
RangeTable是一个动态的系统表,包含了从开始值到结束值的所有值。表包含一个字段名X的字段,开始值和结束值被包含在结果集中,这个表如下面的例子:
SELECTXFROMSYSTEM_RANGE(1,10);