合 SQL语句有哪些常见的分类
Tags: PGDDL分类DMLDQLESSDCLTCLSCS
SQL(Structure Query Language,结构化查询语言)是一种在关系型数据库中定义和操纵数据的标准语言。关系型数据库采用SQL作为客户端程序与数据库服务器间沟通的标准接口。客户端发送SQL指令到服务器端,服务器端执行相关的指令并返回其查询的结果。在数据库服务器端执行的SQL指令可以实现各种数据库操作和管理功能,例如:数据的查询和更新(包括添加、修改和删除数据)操作;创建、修改和删除各种数据库对象(如数据表、视图、索引等);数据库用户账户管理、权限管理等。
关系数据语言的共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。下表给出了所有SQL语句的分类情况:
分类 | 简介 | 示例 |
---|---|---|
DML | 数据操纵语言(Data Manipulation Language,DML):用于改变数据库数据,包括插入新数据的INSERT;删除不需要数据的DELETE;修改存在的数据的UPDATE;合并新旧数据的MERGE。数据更新包括数据的插入、修改和删除等操作,数据更新操作具有一定的风险性,在其执行过程中,DBMS必须保证数据的一致性,以确保数据有效。 | UPDATEINSERTDELETEMERGESELECT ... FOR UPDATE |
DDL | 数据定义语言(Data Definition Language,DDL):用于建立、修改和删除数据库对象,作用就是定义数据的格式和形态。例如CREATE TABLE可以建立表,ALTER TABLE语句则可对表结构进行修改,DROP TABLE语句用来删除某个表,TRUNCATE命令用来删除数据内容,需要注意的是,DDL语句会自动提交事务。在建立数据库时用户首先要使用的就是DDL语句。 | CREATE TABLE/INDEXALTER TABLE/INDEXDROP TABLE/INDEXTRUNCATE TABLE |
DCL | 数据控制语言(Data Control Language,DCL):用于执行权限授予和权限收回操作,包括GRANT和REVOKE两条命令。其中,GRANT命令是给用户或者角色授予权限,REVOKE命令则是收回用户或角色所具有的权限。DCL语句会自动提交事务,在应用开发层面很少用到。 | GRANTREVOKE |
DQL | 数据查询语言(Data Query Language,DQL):即SELECT语句,用于用户检索数据库数据。在所有SQL语句中,SELECT语句的功能和语法最复杂,最灵活。 | SELECT |
TCL | 事务控制语言(Transactional Control Language,TCL):用于维护数据的一致性,包括COMMIT、ROLLBACK、SAVEPOINT等语句。其中,COMMIT语句用于确认和提交已经进行的数据库改变;ROLLBACK用于撤销已经进行的数据库改变;SAVEPOINT语句则用于设置保存点,以取消部分数据库改变,ROLLBACK命令会结束一个事务,但ROLLBACK TO SAVEPOINT不会;SET TRANSACTION设定一个事务的属性(例如,事务的隔离级别);SET CONSTRAINT指定是在每个DML语句之后、还是在事务提交后,执行可延迟完整性约束检查。COMMIT是COMMIT WORK的简写,ROLLBACK是ROLLBACK WORK的简写。 | COMMITROLLBACKSAVEPOINTROLLBACK TO SAVEPOINTSET TRANSACTIONSET CONSTRAINT |
SCS | 会话控制语句(Session Control Statement,SCS):用于动态修改当前用户会话的属性,在应用开发层面极少用到。“ALTER SESSION”用于改变当前会话设置。“SET ROLE”用于启用或禁用角色。系统控制语句(System Control Statement,SCS):用于更改数据库实例的属性。唯一的系统控制语句是ALTER SYSTEM。它能更改系统设置,例如,共享服务器的最小数目、终止一个会话、和执行其他系统级任务。ALTER SYSTEM语句不会隐式提交当前事务。 | ALTER SESSIONSET ROLEALTER SYSTEM |
ESS | 嵌入式SQL语句(Embedded SQL Statements,ESS):用于将DDL、DML、和事务控制语句混入过程化语言程序中。它们和Oracle预编译器一起使用。嵌入式的SQL是一种在过程化语言应用程序中纳入SQL的方法。另一种方法是使用一个程序API,如ODBC(Open Database Connectivity,开放式数据库连接)或JDBC(Java Database Connectivity,Java数据库连接)。嵌入式SQL语句主要包含以下几种:l 定义、分配、和释放游标(DECLARE CURSOR、OPEN、CLOSE)l 指定一个数据库,并连接到该数据库(DECLARE DATABASE、CONNECT)l 初始化描述符(DESCRIBE)l 指定如何处理错误和警告(WHENEVER)l 分析并运行SQL语句(PREPARE、EXECUTE、EXECUTE IMMEDIATE)l 从数据库中检索数据(FETCH) | OPENCLOSECONNECTDESCRIBEWHENEVERPREPAREEXECUTEFETCH |
其中,TCL、SCS和ESS主要是针对Oracle数据库的分类,而DML、DDL、DCL、DQL是通用的分类。
真题1、如果有两个事务,同时对数据库中同一数据进行操作,那么不会引起冲突的操作是()
A、其中有一个是DELETE B、一个是SELECT,另一个是UPDATE
C、两个都是SELECT D、两个都是UPDATE
答案:C。
如果有两个事务,同时对数据库中同一数据进行操作,那么除SELECT外,其余SQL语句不能同时使用,否则会引起冲突。
本题中,对于选项A,若两个操作都是DELETE操作,则其中一个会话就会发生阻塞。所以,选项A错误。
对于选项B,若SELECT的数据恰好是UPDATE的数据,则查询到的数据就会不一致。所以,选项B错误。
对于选项C,2个SELECT语句不会引起冲突。所以,选项C正确。
对于选项D,原理同选项A的DELETE。所以,选项D错误。
所以,本题的答案为C。
真题2、SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,语句INSERT、DELETE、UPDATE实现()功能
A、数据查询 B、数据控制 C、数据定义 D、数据操纵
答案:D。
真题3、下列说法错误的是()
A、ALTER TABLE语句可以添加字段 B、ALTER TABLE 语句可以删除字段
C、UPDATE TABLE语句可以修改字段名称 D、ALTER TABLE语句可以修改字段数据类型
答案:C。
在表中添加列的方法如下:
1 | ALTER TABLE table_name ADD column_name datatype; |
删除表中的列的方法如下:
1 | ALTER TABLE table_name DROP COLUMN column_name; |
改变表中列的数据类型的方法如下:
1 | ALTER TABLE table_name MODIFY COLUMN column_name datatype; |
而UPDATE语句只能更改表中的数据,不能用来更改表的结构。
所以,本题的答案为C。
真题4、SQL语言中删除一个表的指令是()
A、DROP TABLE B、DELETE TABLE C、DESTROY TABLE D、REMOVE TABLE
答案:A。
本题中,对于选项A,在SQL语言中,DROP命令用于删除表定义及该表的所有数据、索引、触发器、约束和权限规范,所以,选项A正确。
对于选项B,DELETE命令的作用是删除表中的数据。TRUNCATE TABLE在功能上与不带WHERE子句的DELETE语句相同:二者均删除表中的全部行,但TRUNCATE比DELETE速度快,且使用的系统和事务日志资源少。所以,选项B不正确。
对于选项C与选项D,不存在DESTORY、REMOVE命令。所以,选项C和选项D不正确。