SQL语句有哪些常见的分类

0    158    1

Tags:

👉 本文共约3667个字,系统预计阅读时间或需14分钟。

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 语句可以删除字段

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

C、UPDATE TABLE语句可以修改字段名称 D、ALTER TABLE语句可以修改字段数据类型

答案:C。

在表中添加列的方法如下:

删除表中的列的方法如下:

改变表中列的数据类型的方法如下:

而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不正确。

所以,本题的答案为A。

真题5、下面不属于SQL语句的分类的是()

A、数据查询语言(DQL) B、数据定义语言(DDL) C、事务控制语言(TCL) D、数据插入语言(DIL)

答案:D。

真题6、Oracle中的提交有哪几种类型?

答案:在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在Oracle数据库中,在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。因为Oracle数据库的默认事务隔离级别是提交读(Read Committed)。提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。

(1) 显式提交

用COMMIT命令直接完成的提交为显式提交。其格式为:

SQL>COMMIT;

(2) 隐式提交

用SQL命令间接完成的提交为隐式提交。这些命令包括:

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

(3) 自动提交

若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:

OFF为默认值,表示关闭自动提交;ON和IMM都表示打开自动提交,二者没有区别;n表示成功执行n条DML操作后再自动提交。n不能小于0,也不能大于20亿(2,000,000,000)。注意,这里不是一个DML语句所影响的行数,而是DML语句的个数。

需要注意的是,无论AUTOCOMMIT设置为何值,当退出SQL*Plus时,当前会话所有的DML操作所改变的数据都会被提交。

实验过程如下:

1、数据库版本

2、查看sqlplus的控制是否自动提交的参数autocommit。无论AUTOCOMMIT设置为何值,当退出SQL*Plus时,当前会话所有的DML操作所改变的数据都会被提交。

3、产生DML不提交

退出当前会话

4,若中途退出未提交DML的SQLPLUS会话,则自动提交DML事务

5,调整自动提交为提交,可见autocommit为on,即不用显式再发起命令commit

连续在当前SQLPLUS会话中运行5个DML语句后会自动提交

第5条insert执行完毕后出现Commit complete.提示。

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部