1.DQL、DML、DDL、DCL的概念与区别

  一.SQL(Structure Query Language)语言是数据库的核心语言。

  SQL的发展是从1974年开始的,其发展过程如下:
  1974年-----由Boyce和Chamberlin提出,当时称SEQUEL。
  1976年-----IBM公司的Sanjase研究所在研制RDBMS SYSTEM R
  时改为SQL。
  1979年-----ORACLE公司发表第一个基于SQL的商业化RDBMS产品。
  1982年-----IBM公司出版第一个RDBMS语言SQL/DS。
  1985年-----IBM公司出版第一个RDBMS语言DB2。
  1986年-----美国国家标准化组织ANSI宣布SQL作为数据库工业标准。
  SQL是一个标准的数据库语言,是面向集合的描述性非过程化语言。
  它功能强,效率高,简单易学易维护(迄今为止,我还没见过比它还好
  学的语言)。然而SQL语言由于以上优点,同时也出现了这样一个问题:
  它是非过程性语言,即大多数语句都是独立执行的,与上下文无关,而
  绝大部分应用都是一个完整的过程,显然用SQL完全实现这些功能是很困
  难的。所以大多数数据库公司为了解决此问题,作了如下两方面的工作:
  (1)扩充SQL,在SQL中引入过程性结构;(2)把SQL嵌入到高级语言中,
  以便一起完成一个完整的应用。

  二. SQL语言的分类

  SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。

  1. 数据查询语言DQL
  数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
  子句组成的查询块:
  SELECT <字段名表>
  FROM <表或视图名>
  WHERE <查询条件>

  2 .数据操纵语言DML
  数据操纵语言DML主要有三种形式:
  1) 插入:INSERT
  2) 更新:UPDATE
  3) 删除:DELETE

  3. 数据定义语言DDL
  数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
  索引、同义词、聚簇等如:
  CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
  | | | | |
  表 视图 索引 同义词 簇
  DDL操作是隐性提交的!不能rollback

  4. 数据控制语言DCL
  数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
  数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
  1) GRANT:授权。

  2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
  回滚---ROLLBACK
  回滚命令使数据库状态回到上次最后提交的状态。其格式为:
  SQL>ROLLBACK;

  3) COMMIT [WORK]:提交。

  在数据库的插入、删除和修改操作时,只有当事务在提交到数据
  库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
  到所做的事情,别人只有在最后提交完成后才可以看到。
  提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
  别说明这三种类型。

  (1) 显式提交
  用COMMIT命令直接完成的提交为显式提交。其格式为:
  SQL>COMMIT;

  (2) 隐式提交
  用SQL命令间接完成的提交为隐式提交。这些命令是:
  ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
  EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

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

2.数据库中,delete、drop与truncate的区别
  (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
  (2)表和索引所占空间。
当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,
DELETE操作不会减少表或索引所占用的空间。
drop语句将表所占用的空间全释放掉。
  (3)一般而言,drop > truncate > delete
  (4)应用范围。
  TRUNCATE 只能对TABLE; DELETE可以是table和view
  (5)TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。
  (6)truncate与不带where的delete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
  (7)delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。
  (8)truncate、drop是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚
  (9)在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或老师想触发trigger,还是用delete。
  (10) Truncate table 表名 速度快,而且效率高,因为:
truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
  (11) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
  (12) 对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
  一、delete
  1、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。
  2、delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。
  3、delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。
  二、truncate
  1、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。
  2、truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。
  3、对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。
  4、truncatetable不能用于参与了索引视图的表。
  三、drop
  1、drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。
  2、drop语句删除表结构及所有数据,并将表所占用的空间全部释放。
  3、drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

  总结:
    1、在速度上,一般来说,drop> truncate > delete。
    2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。
    3、如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;
    如果想删除表,当然用drop;
    如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;
    如果和事务有关,或者想触发trigger,还是用delete;
    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

3.where、groupby、having、orederby的执行顺序
  1、order by是按照某个字段进行排序,desc代表降序,esc代表升序。

  2、group by是按照某个字段进行分组。

  3、“Where” 是一个约束声明,使用Where来约束数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。

  4.“Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。

  where、having、group by、order by的顺序是:where -> group by -> having -> order by

  (2017-09-27  20:30:09)

SQL语言知识点总结的更多相关文章

  1. 2016 - 3 - 12 SQLite的学习之SQL语言入门

    1.SQL语句的特点: 1.1 不区分大小写 1.2 每条语句以;结尾 2.SQL语句中常用关键字: select,insert,update,from,create,where,desc,order ...

  2. SQL 语言 - 数据库系统原理

    SQL 发展历程 从 1970 年美国 IBM 研究中心的 E.F.Codd 发表论文到 1974 年 Boyce 和 Chamberlin 把 SQUARE 语言改为 SEQUEL 语言,到现在的 ...

  3. SQL语言

    SQL语言的分类:DDL DML DQL DCL SQL中的操作无非就是(增删改查) DDL:Data Query Language,数据查询语言! 主要是用来定义和维护数据库的各种操作对象,比如库. ...

  4. SQL语言分类

    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...

  5. SQL语言概述

    功能概述 DDL,数据库定义语言,创建,修改,删除数据库,表,视图,索引,约束条件等 DML,数据库操纵语言,对数据库中的数据进行增,删,改,查 DCL,数据库定义语言,对数据库总数据的访问设置权限 ...

  6. MySQL中的SQL语言

    从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类.1. DDL(Data Definition Language)数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 :CRE ...

  7. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  8. SQLLite 可以通过SQL语言来访问的文件型SQL数据库

    Web Storage分为两类: - sessionStorage:数据保存在session 对象中(临时) - localStorage:数据保存在本地硬件设备中(永久) sessionStorag ...

  9. 数据库与SQL语言

    数据库(DB) :长期储存在计算机中.有组织.可共享的数据的集合. 特点:(1)数据按一定的数据模型组织.描述和储存:(2)较小的冗余度:(3)数据独立性较高:(4)易扩展:(5)可共享(不同用户可按 ...

随机推荐

  1. 数据结构-二叉树 C和C++实现

    二叉树,指针域具有两个下一节点的特殊链表结构. 先来看看它的结构 (此处补图) 来看程序中需要使用到的概念: 树根:二叉树的第一个节点 子树:对于某一个节点指针域指向的节点,左指针指向的节点为左子节点 ...

  2. python+selenium自动化软件测试(第5章):Selenium Gird

    5.1 分布式(Grid) Selenium grid是用来分布式执行测试用例脚本的工具,比如测试人员经常要测试多浏览器的兼容性,那就可以用到grid了.下面就来介绍如何在多个浏览器上运行同一份脚本. ...

  3. hdu1695 GCD(莫比乌斯入门题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意: 给出n.m.k ,求出1<=x<=n, 1<=y<=m 且gcd ...

  4. java调取数据库

    import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S ...

  5. 关于破解Quartus

    在网上找了很多资料,说的也很详细,安装的Quartus13.0,在破解的时候遇到x64和x86两种破解器,两个针对的路径不一样,如果搞混了~可能就会出现这种情况   Error: Current li ...

  6. 性能测试中vmstat命令的常见使用。

    vmstat是Linux中常用的一个命令,尤其是在进行性能测试时,使用该命令,往往能辅助我们进行性能问题定位. 我们先看一下这个命令执行得到的数据. [root@xxx ~]# vmstat 1 10 ...

  7. C语言中指针*p[N], (*P)[N],及**p的区别

    在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: ...

  8. CCIE-MPLS VPN-实验手册(上卷)

    看完了看完了看完了,豪爽豪爽豪爽,一个月了,写得挺棒.总共14个mpls vpn的实验,为留下学习的痕迹,原封不动献出. CCIE实验手册 (路由部分-MPLSVPN基础篇) [CCIE]  JUST ...

  9. 转:【Java并发编程】之四:守护线程与线程阻塞的四种情况

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17099981      守护线程   Java中有两类线程:User Thread(用户线 ...

  10. Linux设置全局代理与yum代理

    设置全局代理,方法如下: 修改 /etc/profile 文件,添加下面内容: http_proxy=http://username:password@yourproxy:8080/ ftp_prox ...