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. 迈向angularjs2系列(7):表单

    目录 一:校验表单的使用 1.搭建脚手架 2.校验表单的使用 3.select下拉列表的用法 一: 校验表单的使用 对于CRUD型的应用,表单是必备组件. 1.搭建脚手架 git clone http ...

  2. jquery的2.0.3版本源码系列(1)总体结构

    为什么选择2.X版本,而不是1.X版本,因为2.X不兼容IE6/7/8,所以少了兼容代码,让我们更专注于jquery原理的代码. 一共有8830行. 1.1 匿名函数自执行 首先,匿名函数的作用是,把 ...

  3. 聊一聊Redis的数据结构

    如果没有记错的话,应该是在两个月前把 我们经常看到此类的文章: Redis的五种数据结构 Redis的数据结构以及对应的使用场景 其实以数据结构这个词去说明Redis的String.Hash.List ...

  4. 【C#多线程编程实战笔记】二、 线程同步

    使用Mutex类-互斥锁 owned为true,互斥锁的初始状态就是被主线程所获取,否则处于未获取状态 name为定义的互斥锁名称,在整个操作系统只有一个命名未CSharpThreadingCookb ...

  5. Spring Boot + Dubbo 可运行的例子源码-实现服务注册和远程调用

    最近公司的一个分布式系统想要尝试迁移到Dubbo,项目本身是Spring Boot的,经过一些努力,最终也算是搭建起一个基础的框架了,放到这里记录一下.需要依赖一个外部的zookeeper. 源码地址 ...

  6. python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸

    ACG-wallpaper 初学python,之前想抓取P站的一些图片来着,然后发现acg12这里有专门的壁纸榜单,就写了个抓取壁纸作为mac桌面壁纸玩玩. 功能:抓取acg12壁纸榜单的动漫壁纸,并 ...

  7. 【深入Java虚拟机】之一:Java内存区域与内存溢出

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17565503 内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若 ...

  8. 团队作业4----第一次项目冲刺(Alpha版本)4.29

    a.站立式会议照片 会议内容: 会议讨论有一些内容要放在beta版本,所以燃尽图可能有些未完成.初级阶段我们只打算先写java代码的统计和显示.这是最基本的任务.在繁忙的任务中,不需要全部按照燃尽图. ...

  9. Swing-setBounds()用法-入门

    先看API: public void setBounds(Rectangle r) 移动组件并调整其大小,使其符合新的有界矩形 r.由 r.x 和 r.y 指定组件的新位置,由 r.width 和 r ...

  10. 201521123122 《java程序设计》第七周学习总结

    201521123122 <java程序设计>第七周实验总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 ArrayList代码分析 1.1 ...