目录
一、SQL词法结构:
二、标识符和关键词:
三、常量:
四、操作符调用:
五、函数调用:
六、高级特性:
1.视图:
2.外键:
3.事务:
一、SQL词法结构:
SQL的输入由一个命令序列组成。一个命令由一个记号的序列构成,并由一个分号(";")终结。输入流的末端也会标志一个命令的结束。具体哪些记号是合法的与具体命令的语法有关。
一个记号可以是一个关键词、一个标识符、一个带引号的标识符、一个literal(或常量)或者一个特殊字符符号。记号通常以空白(空格、制表符、新行)来分隔,但在无歧义时并不强制要求如此(唯一的例子是一个特殊字符紧挨着其他记号)。
另外,注释也可以出现在SQL输入中。它们不是记号,它们和空白完全一样。
SQL语法将根据标识命令、操作符、参数记号的不同而发生变化。最前面的一些记号通常是命令名,因此在上面的例子中我们通常会说一个"SELECt"、一个"UPDATE"和一个"INSERT"命令。但是例如UPDATE命令总是要求一个SET记号出现在一个特定位置,而INSERT则要求一个VALUES来完成命令。
二、标识符和关键词:
SELECT、UPDATE或VALUES记号是关键词的例子,即SQL语言中具有特定意义的词。
它们可以标识表、列或者其他数据库对象的名字,取决于使用它们的命令。因此它们有时也被简称为"名字"。关键词和标识符具有相同的词法结构,这意味着用户无法在没有语言知识的前提下区分标识符和关键词。
SQL标识符和关键词必须以一个字母(a-z,也可以是带变音符的字母和非拉丁字母)或一个下划线(_)开始。后续字符可以是字母、下划线(_)、数字(0-9)或美元符号($)。注意根据SQL标准的规定,美元符号是不允许出现在标识符中的,因为它们的使用可能会降低应用的可移植性。SQL标准不会定义包含数字或者以下划线开头或结尾的关键词,因此这种形式的标识符不会与未来可能的标准扩展冲突 。
系统中一个标识符的长度不能超过 NAMEDATALEN-1 字节,在命令中可以写超过此长度的标识符,但是它们会被截断。默认情况下,NAMEDATALEN 的值为64,因此标识符的长度上限为63字节。
关键词和不被引号修饰的标识符是大小写不敏感的:
SELECT * from "零件供应"."供应";
第二种形式的标识符是:受限标识符或被引号修饰的标识符。它是由双引号(")包围的一个任意字符序列。一个受限标识符总是一个标识符而不会是一个关键字。因此"select"可以用于引用一个名为"select"的列或者表,而一个没有引号修饰的select则会被当作一个关键词,从而在本应使用表或列名的地方引起解析错误。
三、常量:
在KingbaseES中有三种隐式类型常量:字符串、位串和数字。常量也可以被指定显示类型,这可以使得它被更精确地展示以及更有效地处理。
在SQL中,一个字符串常量是一个由单引号(')包围的任意字符序列,例如'This is a string'。为了在一个字符串中包括一个单引号,可以写两个相连的单引号,例如'Krian'。注意这和一个双引号(")不同。
两个只由空白及至少一个新行分隔的字符串常量会被连接在一起,并且将作为一个写在一起的字符串常量来对待。例如:
SELECT 'krian''is boy !!!';
两个 ’ 中间不能有空格!!!
四、操作符调用:
对于一次操作符调用,有三种可能的语法:
| expression operator expression(二元中缀操作符) |
| operator expression(一元前缀操作符) |
| expression operator(一元后缀操作符) |
其中operator记号遵循操作符的语法规则,或者是关键词AND、OR和NOT之一。特定操作符的存在以及它们是一元的还是二元的取决于由系统或用户的定义。
五、函数调用:
一个函数调用的语法是一个函数的名称(可能受限于一个模式名)后面跟上封闭于圆括号中的参数列表:
function_name ([expression [, expression ... ]] )
KingbaseES允许带有命名参数的函数通过位置或命名记号法调用。命名记号法对于有大量参数的函数特别有用,因为它让参数和实际参数之间的关联更明显和可靠。在位置记号法中,书写一个函数调用时,其参数值要按照它们在函数声明中被定义的顺序书写。在命名记号法中,参数根据名称匹配函数参数,并且可以以任何顺序书写。
在任意一种记号法中,在函数声明中给出了默认值的参数根本不需要在调用中写出。这在命名记号法中特别有用,因为任何参数的组合都可以被忽略,而在位置记号法中参数只能从右往左忽略。
KingbaseES也支持混合记号法,它组合了位置和命名记号法。在这种情况中,位置参数被首先写出并且命名参数出现在其后。
CREATE INTERNAL FUNCTION concat_lower_or_upper(a text, b text,
uppercase boolean DEFAULT false)
RETURNS text
AS
$$
SELECT CASE
WHEN $3 THEN UPPER($1 || ' ' || $2)
ELSE LOWER($1 || ' ' || $2)
END;
$$
LANGUAGE SQL IMMUTABLE STRICT;
函数concat_lower_or_upper有两个强制参数a和b。此外,有一个可选的参数uppercase,其默认值为false。a和b输入将被串接,并且根据uppercase参数被强制为大写或小写形式。
六、高级特性:
1.视图:
视图是基于SQL语句结果集的可视化的表,其内容由查询定义。
创建了一个视图,包含供应商的姓名和城市字段,之后可以直接通过查询视图获取数据,不需要再对数据库表进行查询:
CREATE VIEW MyProvider AS SELECT P."姓名",P."城市" FROM "零件供应"."供应商" AS P;
SELECt * FROM MyProvider;
对视图的设计和使用是更好的操作SQL数据库的关键,视图极大简化了用户对数据的操作。视图允许用户通过始终如一的接口来封装表的结构细节,这样避免了表结构随着应用的进化而改变。
视图几乎可以用在任何能够使用表的地方。甚至可以在其他视图的基础上创建视图。
2.外键:
确保在cities表中有相应项之前任何人都不能在weather表中插入行,叫做维持数据的引用完整性。在数据库系统中,可以先检查cities表中是否有匹配的记录存在,然后决定应该接受还是拒绝即将插入weather表的行。
CREATE TABLE place ( name VARCHAr(50) PRIMARY KEY, LOCATION POINT ); CREATE TABLE peopel( pName VARCHAr(50) REFERENCES "place"(name), number INT );
创建两张数据库表,这只外键关系:
尝试插入一个非法的记录:
INSERT INTO "PUBLIC"."peopel" ("pName","number")
VALUES('CHINA',100);
此时对place表先插入一条数据:
INSERT INTO "PUBLIC"."place" ("name") VALUES('CHINA');
再对peopel数据库表插入数据:
此时数据能正常插入数据库表中!!!
3.事务:
事务是指访问并可能更新数据库中各种数据项的一个程序执行单元。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。它将多个步骤捆绑成了一个单一的、要么全完成要么全不完成的操作。步骤之间的中间状态对于其他并发事务是不可见的,如果产生错误导致事务不能完成,则其中任何一个步骤都不会对数据库造成实质影响。
【本文正在参与炫“库”行动-人大金仓征文大赛】
CSDNhttps://marketing.csdn.net/p/98bd30353e7cb998b6070a89e8b91edb



