DDL,DML,DCL

一、DDL(data definition language)数据定义语言

数据定义语言用于执行数据库的任务,对数据库以及数据库中的各种对象进行创建、删除、修改等操作。基本的DDL命令及功能如下:

命令 功能说明
Alter procedure重新编译存储过程
Alter table修改表(增加列、重新定义列、更改表存储区分配)
Alter table and constraint在已有的表增加约束
Create table创建表
Create index创建索引
Drop table删除表
Drop index删除索引
Truncate table截断表中的数据,表示先删除,再提交

Truncate 与 Delete 区别:(摘录:truncate和delete的区别_易腾一涵的博客-优快云博客_truncate和delete的区别)

  1. 当表被truncate后,表和索引的所占空间会恢复到初始大小,Delete操作不会减少表和索引的所占空间
  2. Truncate只能对Table,Delete可以是Table和View(视图)。
  3. Truncate和Delete只删除数据,Drop则删除整个表(结构和数据)。
  4. Delete语句为DML(Data Manipulation Language 数据操纵语句),这个操作会被放到 rollback segment(用来临时的保存当数据库数据发生改变时的先前值)中,事务提交后才生效。如果有相应的trigger(触发器),执行的时候将被触发。Truncate是DDL(Data Definition Language),操作立即生效,原数据不会放到rollback segment中,不能回滚
  5. Truncate速度快,效率高。
  6. Truncate和Delete均不会使表结构及其列、约束、索引等发生改变。

二、DML(Data Manipulation Language 数据操纵语句)

数据操纵语句用于操纵数据库中各种对象、检索和修改数据。使用 DML 语句对某一种数据进行操作时,需要必须拥有该对象的对应操作权限或拥有相应的系统权限。DML命令包括的主要语句及功能如下表:

命令 功能说明
Selcet        查询数据库
Insert在数据库中插入一行数据
Update更新数据库中的数据
Delete从表中删除数据

三、DCL (数据控制语句)

数据控制语句用于安全管理、确定哪些用户可以查看或修改数据库中的数据。DCL命令包括的主要语句及功能如下表:

命令 功能说明
grant将权限和角色授予用户或角色
revoke从用户或角色收回权限
--该⾓⾊的系统权限
select* from dba_sys_privs where grantee = 'dba'
--该⾓⾊的对象权限
select * from dba_tab_privs where grantee = 'dba'
--查询某个⽤户具有多少⾓⾊
select* from dba_role_privs where grantee = '⽤户名';

四、PL/SQL中使用DML、DDL语言

摘录自:PL/SQL中使用DML、DDL语言 - 简书

【select into 可以直接使用(赋值),但是如果是删除,创建,清空表需要用execute immediate执行】

4.1 DML语言的使用

DML语句在PL/SQL中的使用方式和单独执行并没有什么区别,示例:

begin
  INSERT INTO product(name,price,num) values('GTX 2080Ti',2333.33,33);
  COMMIT;
end;


begin
  UPDATE product SET price = 6666.66 where num = 33;
  COMMIT;
end;


begin
  DELETE FROM product where num = 33;
  COMMIT;
end;

4.2 DDL语言的使用

PL/SQL中DDL语言的使用需要用到 EXECUTE IMMEDIATE 命令,同时,这个命令不仅可以执行DDL语句,也可以执行DML语句.

--DDL
declare 
  v_ddl_sql varchar2(200);  

begin
  v_ddl_sql := 'CREATE TABLE ddl_test(
               tid number(10) primary key,
               tname varchar2(10)
            )';
  EXECUTE IMMEDIATE v_ddl_sql;
end;
--DML
declare 
  v_dml_sql varchar2(200);   
begin
  v_dml_sql := 'INSERT INTO ddl_test VALUES(1,';
  v_dml_sql := v_dml_sql ||  '''AAA'')';
  EXECUTE IMMEDIATE v_dml_sql;
  COMMIT;
end;

由于使用 EXECUTE IMMEDIATE 命令主要是拼接字符串,拼接起来很麻烦,所以如果不是特别需要,执行DML语句不要使用动态SQL的方式.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值