为新员工准备的考题中,有一道是问哪些关键字,属于DCL数据控制语言的,究竟COMMIT、ROLLBACK、GRANT、REVOKE,哪些是,哪些不是?

DCL,Data Control Language,其实这就在于如何理解“数据控制”。官方手册《Database SQL Language Reference》并未专门提到DCL,SQL类型只是有以下几种,

DCL-数据控制语言_DCL

从SQL标准文档看,的确是将GRANT归属在DDL,

DCL-数据控制语言_数据_02

像GRANT和REVOKE关键字,他是归在了DDL中,

DCL-数据控制语言_SQL_03

COMMIT和ROLLBACK,则归属在了TCL,即事务控制语言,这个应该好理解,这两个关键字,标识了事务结束,

DCL-数据控制语言_SQL_04

检索其他的官方手册,从《Database Gateway for DRDA User's Guide》中看到这个章节的描述,



1.3.7 Data Control Language

You can issue native data control language (DCL) statements from an Oracle environment, allowing central administration of user privileges and access levels for heterogeneous data stores.

醍醐灌顶,DCL允许对数据访问权限的集中管理,这不就是GRANT和REVOKE的作用么?因此,“数据控制”在这里的意思,是“控制数据的访问权限”,并不是事务数据方面的控制,GRANT和REVOKE属于DCL,妥妥的。