随笔-数据库-DML DDL DCL的区别

目录

1、什么是DML、DDL、DCL?

1.1 、DML、DDL、DCL基本概念

1.2、DML 和 DDL、DCL区别

2、DDL(数据定义语言)

2.1 create(创建)

2.2 drop(删除)

2.3 alter(更新)

2.4 truncate(删除数据)

3、DML(数据操作语言)

4、DCL(数据控制语言)

5、delete 和 truncate 的区别


1、什么是DML、DDL、DCL?

1.1 、DML、DDL、DCL基本概念

DML(Data Manipulation Language):数据操作语言。主要用于对数据库中的数据进行操作,包括select(查询,也可归类到DQL,即数据查询语言)、insert(新增)、update(修改)和delete(删除)语句。

DDL(Data Definition Language):数据定义语言。主要用于对数据库中的对象(表、索引、视图等)或对象的属性(字段等)进行操作,包括create(创建)、drop(删除)、alter(更新)、truncate(删除数据)等语句。

DCL(Data Control Language):数据控制语言。主要用于设置或更改数据库用户或角色的权限,包括grant(授权)、revoke(取消收取)等语句。

1.2、DML 和 DDL、DCL区别

    DML语句执行后需要手动提交事务(前提是自动提交关闭),例如insert(新增)、update(修改)和delete(删除)语句(select除外)执行后需要手动commit;DDL和DCL语句执行后不需要手动提交事务。

2、DDL(数据定义语言)

2.1 create(创建)

语法(以表为例)

create table 表名(

字段名 字段类型,

字段名 字段类型,

...

);

表名规则:

  • 必须以字母开头
  • 表名中只可有 字母、数字、_、$ 、#
  • 表名长度 1--30字符
  • 表名不可与其他对象名重复(存储过程、表、触发器、定时器等)
  • 不能和保留字重名
--select * from V$reserved_Words order by keyword; -- 查询保留字
-- 事例(创建student表)
create table student(
       id number,
       studentno varchar2(20),
       studentname varchar2(60),
       createtime date default sysdate
);

2.2 drop(删除)

-- 语法
drop 对象标识 对象名;
-- 事例
drop table student; -- 删除表student  此时表在回收站,可通过闪回技术恢复
drop table student purge; -- 删除表student  并清空回收站
drop database dbtest; -- 删除数据库dbtest

2.3 alter(更新)

-- 语法 以表为例
alter table 表名 操作标识 属性;
alter table student add age number; -- 新增字段
alter table student modify studentname varchar2(80); -- 修改字段  blob clob 类型不能修改,需要先删除再新增
alter table student drop column age; -- 删除字段
alter table student rename column studentname to stuname; -- 重命名字段

2.4 truncate(删除数据)

-- 语法
truncate 对象标识 对象名;
truncate table student; -- 删除student表中所有数据

3、DML(数据操作语言)

-- select
select <字段名> from <表名> where <查询条件>;
select t.id, t.studentno from student t where t.id = 111;

-- insert
insert into student(id, studentno, studentname)
values(1, '2020001', '张三');
insert into student values(2, '2020002', '李四');
insert into student(id, studentno, studentname)
select t.id, t.studentno, t.studentname
from student_test t;

-- update
update student t set t.studentname = '王五' where t.id = 1;

-- delete
delete from student where id = 2; 
delete from student;

4、DCL(数据控制语言)

-- grant
grant select on 表名 to 用户名;
grant select, insert, delete on表名 to 用户名1, 用户名2;
-- 事例
grant select on student to dbtestone;
grant select, insert, delete on student to dbtestone, dbtesttwo;
-- revoke
revoke select on 表名 from 用户名;
revoke select, insert, delete on 表名 from 用户名1, 用户名2;
-- 事例
revoke select on student from dbtestone;
revoke select, insert, delete on student from dbtestone, dbtesttwo;

5、delete 和 truncate 的区别

当执行全表数据删除时,delete 和truncate是执行的最终结果是一样的,但两者还有部分区别,区别如下:

  • delete 可回退;truncate 不能回退
  • delete 是一行一行删除;truncate 是删除表后重建表;所以当数据量大时,truncate 效率高,数据量小时,delete 效率高。
  • delete 支持闪回;truncate 不支持闪回。
  • delete 不会回收空间(会产生碎片);truncate 会回收空间(不会产生碎片)。

版权声明:本文为lanmuhhh2015原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。