语法模板
数据库操纵具有不少语法,使用时又是灵活多变的,俗话说:“好记性不如烂键盘”,虽然有道是“熟能生巧”,但人脑记不了也没必要记住如此繁多的语句,因此对语句进行总结是必不可少的,以方便以后随去随用。
DDL(Data Definition Language 数据定义语言)
定义了对数据库模式、基本表、视图和索引结构的创建、修改和删除语法
| 对象 | 创建 | 修改 | 删除 |
|:----------|:-------------|:----------|:----------|
|模式(schema)|CREATE | |DROP |
|基本表(table)|CREATE |ALTER |DROP |
|视图(view)|CREATE | |DROP|
|索引(index)|CREATE |ALTER |DROP |
*DROP语句一般后跟CASCADE和RESTRICT,两者选其一:CASCADE为级联,直接删除该模式及其下属的数据库;RESTRICT为限制,当该模式下有数据库对象时无法删除该模式
具体语法
模式
-
创建语法
CREATE SCHEMA <模式名> AUTHORIZATION<用户名>;
-
删除语法
DROP SCHEMA <模式名> <CASCADE|RESTRICT>;
基本表
-
创建语法
CREATE TABLE<表名>( <列名><数据类型> [<CONSTRAINT<约束名>CHECK(完整性约束条件)|PRIMARY KEY|UNIQUE|NOT NULL>,] ... <列名><数据类型> [<CONSTRAINT<约束名>CHECK(完整性约束条件)|PRIMARY KEY|UNIQUE|NOT NULL>,] [PRIMARY KEY(列名),] [FOREIGN KEY(列名) ON 参照表名(参照列名)] );
-
修改语法
ALTER TABLE <表名>( [ALTER COLMUN<列名><数据类型>,] [ADD <新列名><数据类型> [<CONSTRAINT<约束名>CHECK(完整性约束条件)|PRIMARY KEY|UNIQUE|NOT NULL>,]] [ADD CONSTRAINT 约束名>CHECK(完整性约束条件)|PRIMARY KEY|UNIQUE|NOT NULL>,] [DROP <列名> CASCADE|RESTRAICT] [DROP CONSTRAINT CASCADE|RESTRAICT] );
-
删除语法
DROP TABLE<表名> CASCADE|RESTRICT;
视图
-
创建语法
CREATE VIEW <视图名> (列名1,列名2...) AS <子查询> [WITH CHECK OPTION];
*WITH CHECK OPTION是保证进行增删改时仍使用子查询的谓词条件
-
删除语法
DROP VIEW <视图名> [CASCADE];
索引
-
创建语法
CREATE UNIQUE|CLUSTER INDEX<索引名> ON <表名>(列名1[次序1],列名2[次序2]);
-
修改语法:仅能更改索引名,原因也好理解——一个基本表可以建立若干个索引,如果对已建立的某个索引有问题,仅需删除该索引并重新添加索引即可,不影响基本表同时也减少了语法设计开销。
ALTER INDEX <旧索引名> RENAME TO <新索引名>
-
删除语法
DROP INDEX<索引名>;
DML(Data Manipulation Language 数据操纵语言)
定义了对基本表和视图元组的增删改操作语法
插入语句(insert)
INSERT INTO <表名|视图名> (<列名1>,<列名2>,...) VALUES (<值1>,<值2>,...);
- 当值排列与基本表列排列一致时,INSERT语句中列名排列可以省略
- 只有建立在纯净基本表查询(没有连接和投影)的视图才能执行插入操作 并且操作会自动影响相关的基本表
修改语句(update)
UPDATE <表名|视图名> SET <列名1> = <新值1>[,<列名2> = <新值2>...] WHERE<条件表达式>;
- 只有建立在纯净基本表查询(没有连接和投影)的视图才能执行修改操作,并且操作会自动影响相关的基本表
删除语句(delete)
DELETE FROM <表名|视图名> [WHERE <条件表达式>];
- 只有建立在纯净基本表查询(没有连接和投影)的视图才能执行删除操作,并且操作会自动影响相关的基本表
DQL(Data Query Language 数据查询语言)
定义了对基本表和视图元组的查询操作语法
SELECT [DISTINCT|ALL][聚集函数|函数]<列名1>[别名1],[DISTINCT|ALL][聚集函数|函数]<列名2>[别名2]... FROM <视图名1|基本表名1>[别名1],<视图名2|基本表名2>[别名2]...|<SELECT查询语句>[AS]<别名> [WHERE <条件表达式>] [GROUP BY <列名1>,<列名2>...[HAVING <条件表达式>]] [ORDER BY <列名1>,<列名2>...[ASC|DESC]];
-
WHERE条件表达式可选形式
·属性列名 <比较符> 属性列名|常量|SELECT语句)
·属性列名[NOT] BETWEEN (属性列名|常量| SELECT语句))AND (属性列名|常量|(SELECT语句))
·属性列名 [NOT] IN (属性列名|常量| [ANY|ALL] (SELECT语句))
·属性列名 [NOT] LIKE (%_通配字符)
·属性列名 IS [NOT] NULL
·属性列名 [NOT] EXISTS (SELECT语句)
·<条件表达式> AND|OR <条件表达式> AND|OR <条件表达式>
-
DISTINCT:删除重复列;ALL:允许存在重复列
-
如果连接的基本表有多个,每个表都起别名的连接查询为内连接查询,否则为叉积连(笛卡儿积连接)
-
聚集函数不能用在WHERE条件表达式中,原因也很容易理解:聚集函数是对GROUPBY后的结果集进行处理,因此要求WHERE条件表达式比聚集函数更先被执行,所以聚集函数不能用在WHERE条件表达式中
DCL(Database Control Language 数据库控制语言)
定义了对数据库角色权限授予、回收的语法以及对事务的控制语法
权限语句
授予语句(grant)
GRANT <操作名>,<操作名>…
ON <表名|视图名><列名1><列名2>[,<表名|视图名><列名1><列名2>…]
TO <用户名>[,<用户名>…]
[WITH GRANT OPTION];
- WITH GRANT OPTION表示被授权用户可以授予该权限给其他用户
收回语句(revoke)
REVOKE <操作名>,<操作名>...
ON <表名|视图名><列名1><列名2>[,<表名|视图名><列名1><列名2>...]
FROM <用户名>[,<用户名>...][CASCADE|RESTRICT];
- CASCADE表示强制收回被授权用户授予其他用户的权限
- RESTRICT表示当被授权用户授予其他用户的权限未被收回时,拒绝本次收回操作
角色语句
角色实际上是权限的集合
创建语句(create)
CREATE <角色名>
- WITH ADMIN OPTION表示被授权用户可以授予该权限给其他用户
- 角色实际上时权限的集合
授予语句(grant)
GRANT <角色名>,<角色名>... TO <用户名>[,<用户名>...] [WITH ADMIN OPTION];
- WITH ADMIN OPTION表示被授权用户可以授予该权限给其他用户
收回语句(revoke)
REVOKE <角色名>,<角色名>... FROM <用户名>[,<用户名>...]
事务语句
事务实际上是一次不可被拆分的操作集合,具有原子性(Automatic不可分割)、一致性(consistency一次性更新)、隔离性(isolation不相互影响)、持续性(Durability更新永久存在),主要目的在于消除由于逐个操作时出错带来的脏数据,保持数据一致性和完整性。
BEGIN TRANSACTION
开始事务的所有操作
COMMIT
将事务的操作带来的更新写进数据库
ROLLBACE TRANSACTION
事务执行出错,回滚所有更新操作,即将更新从数据库消除以恢复到事务开始前的状态