目录
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版权协议,转载请附上原文出处链接和本声明。