3、oracle-插入 删除 修改 事务acid

1 新增数据

    insert into 表名 values(值1,值2.....)
    insert into 表名(列1,列2....) values(值1,值2.....)

    往部门表里边插入以下几行信息
        DEPTNO DNAME                        LOC
    ---------- ---------------------------- --------------------------
            50 SUPPORT                      WASHINGTON
            60 TEST
            70 PURCHASING

        insert into dept values(50 , 'SUPPORT' , 'WASHINGTON');
        insert into dept values(60 , 'TEST' , NULL);
        insert into dept(deptno,dname) values(70 , 'PURCHASING' );
            没有指定的列,会自动插入默认值,一般是NULL

2 修改数据


    update 表名 set1 = 值1 , 列2 =值2  [ where cond]
    160号部门的LOC改成MIAMI
        update dept set loc = 'MIAMI' where deptno = 60

    250号部门的部门名字改成 SUPPORT1 ,LOC改为NULL
        update dept set dname = 'SUPPORT1' , loc = NULL  where deptno = 50

3 删除数据


    delete from 表名 [ where cond ]

    1 删除部门号为50的部门信息
        delete from dept where deptno = 50

    2 删除部门号大于40的部门信息
        delete from dept where deptno > 40


insert into 表名 values(列的数据。。。。)
update 表名 set 列1 = 值
delete from 表名 where

事务

数据库事务,是由有限的数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行。
数据库事务由以下的部分组成:
一个或多个DML语句
一个 DDL(Data Definition Language – 数据定义语言) 语句
一个 DCL(Data Control Language – 数据控制语言) 语句

事务的特性(ACID)
事务4大特性
原子性 (Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
一致性 (Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
隔离性 (Isolation):事务的执行不受其他事务的干扰,当数据库被多个客户端并发访问时,隔离它们的操作,防止出现:脏读、幻读、不可重复读。
持久性 (Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

事务的起始标志:Oracle中自动开启事务,以DML语句为开启标志。
执行一个增删改查语句,只要没有提交commit和回滚rollback,操作都在一个事务中。
事务的结束标志:提交、回滚都是事务的结束标志。

事务的提交:
显示提交:commit
隐式提交:
1. 有DDL语句,如:create table除了创建表之外还会隐式提交Create之前所有没有提交的DML语句。
2. 正常退出(exit / quit)
事务的回滚:
显示回滚:rollback
隐式回滚:掉电、宕机、非正常退出。

SQL99定义4种隔离级别:
1. Read Uncommitted 读未提交数据。
2. Read Commited 读已提交数据。 (Oracle默认)
3. Repeatable Read 可重复读。 (MySQL默认)
4. Serializable 序列化、串行化。 (查询也要等前一个事务结束)
这4种MySQL都支持

Oracle支持的隔离级别: Read Commited(默认)和 Serializable,以及Oracle自定义的Read Only三种。

ACID
    原子性
    一致性
    隔离性
    持久性


    隔离级别

        某一行数据 本来是0

        读未提交
            A事务开启
                                        B事务开启
            将0改成100
                                        读取读到100
            commit提交
                                        B事务结束commit




        读已提交

            A事务开启
                                        B事务开启
            将0改成100
                                        读取读到0
            commit提交
                                        读取读到100
                                        B事务结束commit



        可重复度

            A事务开启
                                        B事务开启
            将0改成100
                                        读取读到0
            commit提交
                                        读取读到0
                                        B事务结束commit

            C事务开启
            读取读到100
            ...
        串行化

            A事务开启
            将0改成100
            commit提交

事务的控制


    创建保存点
        savepoint 保存点名字
    回滚到相应保存点
        rollback to savepoint 保存点名字

    一但当前事务结束,在当前事务建立的savepoint将失效。


【示例】:
1. SQL> create table testsp ( tid number, tname varchar2(20));  DDL语句会隐式commit之前操作
2. set feedback on 打开回显
3. insert into testsp values(1, 'Tom')      
4. insert into testsp values(2, 'Mary')      
5. savepoint aaa    
6. insert into testsp values(3, 'Moke')         故意将“Mike”错写成“Moke”。
7. select * from testsp                 三条数据都显示出来。
8. rollback to savepoint aaa        回滚到保存点aaa
9. select * from testsp         发现表中的数据保存到第二条操作结束的位置
需要注意,前两次的操作仍然没有提交。如操作完成应该显示的执行 commit 提交。

猜你喜欢

转载自blog.csdn.net/u014749668/article/details/82317253