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. maven 搭建 SpringMVC + MyBatis(1)

    ·做了两年多Java Web一多半的项目都是SSM架构的,只搭建过两次,趁着周末做个总结整理. Eclipse搭建Maven项目 1.new project  --> Maven project ...

  2. JSON创建键值对(key是中文或者数字)方式详解

    JSON创建键值对(key是中文或者数字)方式详解 先准备好一个空的json对象 var obj = {}; 1. 最原始的方法 obj.name = 'zhangsan'; //这种方式很简单的添加 ...

  3. oracle数据块核心剖析

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp57 数据块(Oracle Data Blocks),本文简称为" ...

  4. CSS背景效果

    前面的话 本文将详细介绍CSS背景效果 条纹背景 [双条纹背景] background:linear-gradient(#fb3 50%, #58a 50%); background-size: 10 ...

  5. Java之String、StringBuffer、StringBuilder

    String.StringBuffer和StringBuilder的理解 这三个类学过已经有一段时间了,想通过这篇文章再将其复习一下,以求温故知新. 首先说一下三者各自的特性 String: Stri ...

  6. 03-TypeScript中的强类型

    在js中不能定义类型,而是根据赋值后,js运行时推断类型.在ts中支持强类型,强类型包括string.number(浮点型,不是整型).boolean.any(任意类型).Array<T> ...

  7. C# 反向生成工具(DAL BLL Modle)

    VS2015  ADO.NET无果后果断~! 动软生成:http://pan.baidu.com/s/1gfIf0ZL

  8. 个人作业(3)----个人总结(Alpha阶段)

    一.个人总结. 个人完成的任务:在此阶段我完成了用户调研.部分测试以及部分博客书写. 个人及团队心得:经过几周Alpha阶段开发后,我大致了解了开发软件的过程,开发一个软件并没有以往想象中那么简易,在 ...

  9. 201521044091 《java程序设计》第八周学习总结

    本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容.1.2 选做:收集你认为有用的代码片段 书面作业 本次作业题集集合 List中指定元素的删除(题目4-1)1.1 实验 ...

  10. 201521123007《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 以下是ArrayList的contains源代码: public bool ...