Oracle的DML增删改操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sl1992/article/details/84728543


Oracle处理数据DML的操作,Oracle增删改操作

1.数据操作语言DML

DML(Data Manipulation Language,数据操作语言) 可以在下列条件下执行:

向表中插入数据(insert),修改现存数据(update),删除现存数据(delete)。

事务是由完成若干项工作的DML语句组成的。

执行完DML操作后,如果没有设置自动提交,则需要自己手动提交或回滚事务。
提交数据库事务

2.插入数据

2.1insert语句语法

使用INSERT语句向表中插入数据。
使用这种语法一次只能向表中插入一条数据。

INSERT语法

2.2插入数据

  • 为每一列添加一个新值。
  • 按列的默认顺序列出各个列的值。
  • 在INSERT子句中随意列出列名和它们的值。
  • 字符和日期型数据应包含在单引号中。

2.3向表中插入空值

select * from dept;

部门表原始数据

隐式方式: 在列名表中省略该列的值。

insert into dept (deptno, dname) values (50, 'TEST');

显式方式: 在VALUES子句中指定空值。

insert into dept values (60, 'MANAGER', null);

2.4插入指定的值

insert into emp 
	(empno,ename,hiredate,sal)
values 
	(8001,'GIGI',sysdate,4000);

说明:SYSDATE记录当前系统的日期和时间。

2.5创建脚本(使用&变量指定值)

在SQL语句中使用&变量指定值。&后变量名称可以自定义,如果变量名称对应的字段需要使用单引号引起来,则可以在&变量名上直接用单引号引起来,不需要在输入变量值的时候加单引号。

insert into emp (empno, ename, sal) values (&empno, '&ename', &sal);

弹出输入框

insert into emp (empno, ename, sal) values (&empno, &ename, &sal);

输入带引号的值

select empno,ename,&column from emp;

输入查看列名的值

select * from &table;

输入查看某个表的数据

update emp set ename='&new_name' where empno=&empno

输入根据条件更新数据后的值

2.6从其它表中拷贝数据(Insert Into … Select …)

insert into mytable 
	select mycolums from ...

不必书写VALUES关键字。
子查询中的值列表应与INSERT子句中的列名对应。

insert into emp1 (empno, ename, sal)
	select empno, ename, sal from emp deptno = 30	

3.更新数据

3.1语法

UPDATE语法

3.2一般用法示例

  • 使用where子句指定需要更新的数据
update emp 
set ename = 'JOHN', job = 'SALESMAN' 
where empno = 8002;
  • 如果省略where子句,则表中的所有数据都将被更新

3.3在update语句中使用子查询

例,更新8001号员工的工作和工资使其与7900号员工相同

update emp 
set job = (
        select job from emp where empno = 7900
    ),
    sal = (
        select sal from emp where empno = 7900
    )
where empno = 8001;  

或者

update emp 
set (job, sal) = (
          select job,sal from emp where empno = 7900
    )  
where empno = 8001;

4.删除数据

4.1语法

DELETE语法

4.2一般用法示例

  • 使用where子句指定删除的记录。
delete from emp where empno = 8001;
  • 如果省略where子句,则表中的全部数据将被删除。

4.3在DELETE中使用子查询

在delete中使用子查询,使删除基于另一个表中的数据

delete from emp 
where empno in 
	(select empno from emp where deptno is null)

4.5delete和truncate

  • 都是删除表中的数据
  • delete操作可以rollback,可以闪回
  • delete操作可能产生碎片,并且不释放空间
  • truncate操作是清空表
truncate table bonus;

5.数据库事务

5.1事务基础

数据库事务由以下的部分组成:

  • 一个或多个DML语句
  • 一个DDL(Data Definition Language,数据定义语言)语句
  • 一个DCL(Data Control Language,数据控制语言)语句

数据库事务:

  • 以第一个DML语句的执行作为开始
  • 以下面的其中之一作为结束:
    • 显式结束:commit,rollback
    • 隐式结束(自动提交):DDL语言,DCL语言,exit(事务正常退出)
    • 隐式回滚(系统异常终了):关闭窗口,死机,停电

使用COMMIT和ROLLBACK语句,可以:

  • 确保数据完整性。
  • 数据改变被提交之前预览。
  • 将逻辑上相关的操作分组。

5.2控制事务

控制事务

  • 保存点
    • 使用SAVEPOINT语句在当前事务中创建保存点。
    • 使用ROLLBACK TO SAVEPOINT语句回滚到创建的保存点。

回滚到保存点

5.3事务进程

  • 自动提交在以下情况中执行:

    • DDL语句。
    • DCL语句。
    • 不使用COMMIT或ROLLBACK语句提交或回滚,正常结束会话exit。
    • 会话异常结束或系统异常会导致自动回滚。

要使DML操作自动提交,把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交。其格式为:

SQL> SET AUTOCOMMIT ON;
  • 提交或回滚前的数据状态

    • 改变前的数据状态是可以恢复的
    • 执行DML操作的用户可以通过SELECT语句查询之前的修正
    • 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
    • DML语句所涉及到的行被锁定, 其他用户不能操作
  • 提交后的数据状态

    • 数据的改变已经被保存到数据库中。
    • 改变前的数据已经丢失。
    • 所有用户可以看到结果。
    • 锁被释放,其他用户可以操作涉及到的数据。
    • 所有保存点被释放。

提交数据示例:

提交数据示例事务

  • 数据回滚后的状态

使用ROLLBACK语句可使数据变化失效:

①数据改变被取消。
②修改前的数据状态被恢复。
③锁被释放。

ROLLBACK使数据变化失效

5.4数据库的事务隔离级别

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:

  • 脏读:对于两个事物T1, T2, T1读取了已经被T2更新但还没有被提交的字段之后, 若T2回滚,T1读取的内容就是临时且无效的。
  • 不可重复读:对于两个事物T1, T2, T1读取了一个字段,然后T2更新了该字段. 之后,T1再次读取同一个字段,值就不同了。
  • 幻读:对于两个事物T1, T2, T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行之后,如果T1再次读取同一个表,就会多出几行。

数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。

一个事务与其他事务隔离的程度称为隔离级别。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。

  • 数据库提供的 4 种事务隔离级别:
    事务的隔离级别

Oracle支持的2种事务隔离级别:READ COMMITED,SERIALIZABLE。Oracle默认的事务隔离级别为:READ COMMITED。
MySQL支持4种事务隔离级别。MySQL默认的事务隔离级别为:REPEATABLE READ。

设置事务隔离级别:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

本文参考:
https://www.cnblogs.com/study-s/p/5287529.html

猜你喜欢

转载自blog.csdn.net/sl1992/article/details/84728543