oracle-- 数据更新操作和事务操作

一 。sql语言操作分类【需要背 面试需要】: 
 
   1 数据定义语言DDL (DATA DEFINE LANAGUAGE)  (定义,操作数据的结构) 【-->java的变量定义】 
 
       CREATE : 在数据库中创建新的数据对象 
 
       ALTER : 修改数据库中对象的数据结构 
 
       DROP : 删除数据库中的对象 
 
       DISABLE/ENABLE TRIGGER : 修改触发器的状态 
 
       UPDATE STATISTIC : 更新表/视图统计信息 

       TRUNCATE TABLE : 清空表中数据 

       COMMENT : 给数据对象添加注释 
 
       RENAME : 更改数据对象名称 

     2数据操作语言DML 【重点关注 工作必用】
 
        DML(Data Manipulation Language)(CRUD), 用于添加/修改/查询数据库中数据。 
 
       DML包含以下语句: 
 
       INSERT :将数据插入到表或视图 
 
       DELETE :从表或视图删除数据 
 
       select :从表或视图中获取数据 
 
       UPDATE :更新表或视图中的数据 
 
       MERGE : 对数据进行合并操作(插入/更新/删除) 
 
    3数据控制语言DCL 
 
        DCL(Data Control Language)用来向用户赋予/取消对数据对象的控制权限。 
 
       DCL包含以下语句: 
 
       GRANT : 赋予用户某种控制权限 
 
       REVOKE :取消用户某种控制权限 
 
   4. 事务控制语言(TCL) 【重点】
 
        TCL(Transaction Control Language)用来对事务进行管理。 

       TCL包含以下语句: 
 
       COMMIT : 保存已完成事务动作结果 
 
       SAVEPOINT : 保存事务相关数据和状态用以可能的回滚操作 

       ROLLBACK : 恢复事务相关数据至上一次COMMIT操作之后 
 
       SET TRANSACTION : 设置事务选项 


二。 crud (create read update,delete)【重点】
     所有的数据库  都是使用这四个单词来描述增删改查 isud  (insert select update delete)
     1 insert语句
       语法:

          INSERT INTO 表名[(列名1,列名2,…)] VALUES(值1, 值2,…);   --列名的个数和值的个数 必须相同              【表列较多 建议使用】

          insert into 表名  values(值1,值2 .。。)   --如果没有指定列名  值得个数必须和表中所有的列的个数相同 列的类型必须匹配   【表列较少 建议使用】

          INSERT INTO 表名[(列名2,列名1,…)] VALUES(值2,值1, …); 值得顺序和列的顺序保持一致

          insert into student select '11','test1',25,'女'  from dual   --根据常量来模拟

          insert into student1 select * from student      --可以根据 insert into select语句来进行复制表的数据 (备份表)    

seelct查询的列数必须和insert插入的表列数一致 并且列类型匹配

          日期类型的插入

              insert into student1 values(7,'a',20,'男',sysdate)

              insert into student1 values(7,'a',20,'男',to_date('1987-06-18','yyyy-MM-dd'))
  
注意

指定列值时,字符串类型的要加‘’单引号。数字类型直接指定。日期可以使用TO_DATE()函数来转换;也可以用sysdate代表当前日期。

TO_DATE('2009-06-06','yyyy-mm-dd')。

某列的值要插入空值时,可以用NULL关键字代替或不列出该列名   
     
      2 update语句(注意在修改之前一定先将条件写好)
          语法:
            UPDATE 表名 SET 列名=值[,列名2=值2,…] [WHERE 修改条件];  --

  注意
没有指定修改条件,将修改表中的所有记录。
在UPDATE语句中也可以使用子查询。

     3 delete语句(注意在修改之前一定先将条件写好)
语法:
DELETE FROM 表名 [WHERE 删除条件];
注意
不指定删除条件,会删除所有的行。


三。 事务【重点】

     事务表示 一段sql的执行 要么同时成功 要么同时失败 

      任意的dml语句【数据的修改】 必须要提交数据(因为用户的误操作 导致数据的损坏 有可能导致无法挽回的灾难  可以使用 事务的机制来解决这类题)

     commit(提交) 一旦提交了事务 数据就被修改到物理的数据文件中  (ctrl+s) 保存到文件

     rollback(回滚) 如果除了误操作 需要回滚当前事务 (记事本ctrl+z)(撤回)

     事务的acid属性
原子性(Atomic):

指整个数据库事务是不可分割的工作单元。原子性确保在事务中的所有操作要么都发生,要么都不发生。

   举例:
      --被一起的执行的dml语句位于同一事务当中
insert into scott.emp values(8111,'test','MANAGER',7934,sysdate,3000,100,10);
insert into scott.emp values(8112,'test','MANAGER',7934,sysdate,3000,100,10);
insert into scott.emp values(8113,'test','MANAGER',7934,sysdate,3000,100,10);
rollback;
一致性(Consistency):
一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的。即数据应当不会被破坏。

   举例: 
      insert into scott.emp values(8113,'test','MANAGER',7934,'2012-12-15',3000,100,10);
  一旦数据被约束成某种 类型或者某些值 那么就必须对应满足这些类型或者某些值
隔离性(Isolation):
指多个事务同时操作同一数据时,每个事务都有各自的完整数据空间。
   未提交的数据  在其他的客户端中是无法看到因为 因为隔离性
持久性(Durability):
一旦事务完成,事务的结果应该持久化

   存到物理磁盘中(就是断电了 下次还能 看的到 )

    事务的提交方式【了解即可】

        默认数据库使用 手动(非自动)提交方式 需要操作者 使用commit关键字来提交

           SQL> show autocommit;

                autocommit OFF

    设置自动提交

   SQL> set autocommit on;

   SQL> insert into scott.emp values(8113,'test','MANAGER',7934,sysdate,3000,100,10);

已创建 1 行。

提交完成。

隐式的事务提交(不需要使用commit和rollback也会自动提交)

    1 自动隐式提交事务:

                  执行一个DDL语句、执行一个DCL语句、从SQL*Plus正常退出(exit,quit)

    2自动隐式回滚事务:

                  强行退出SQL*Plus、客户端到服务器的连接异常中断、系统崩溃   
  

显式事务控制:(建议使用)

提交和结束事务:COMMIT;

回滚事务:ROLLBACK [TO 回滚点];

设置事务回滚点:SAVEPOINT 回滚点;
       
回滚点
            savepoint a;

insert into scott.emp values(8113,'test','MANAGER',7934,sysdate,3000,100,10);

savepoint b;

insert into scott.emp values(8114,'test','MANAGER',7934,sysdate,3000,100,10);

rollback to a; --没有记录被插入

rollback to b  -- 8113被插入 8114被回滚

commit;

事务引发的问题和隔离级别【重点】

    事务 对同一行数据进行操作时  必须等先操作的客户端 提交或者回滚事务后 另外一个客户端才能操作数据(锁)

            事务操作同一行数据出现的问题 (并发的引发的问题)

   脏读  【是一种错误】

      读取到了用户未提交的数据  oracle数据库永远不会出现脏读

    不可重复读 【只是一种设计问题】

      在读取的事务中 两次重复读取同一行数据 发现数据 被更改了  

   幻读【只是一种设计问题】

      在读取的事务中 两次读取某一个条件的多条数据时 发现多出了几条数据
  

         隔离级别 (就是为了解决事务操作同一份数据导致的问题) 

READ UNCOMMITTED: 读未提交数据。脏读、不可重复读、幻读都可能发生。它的事务隔离性最低。

READ COMMITTED:读已提交数据。解决了脏读。【数据库的默认的隔离级别】

REPEATABLE READ:可重复读。解决不可重复读,脏读。

SERIALIZABLE:串行化。解决任何并发事务问题。最严格的事务


Oracle只支持READ COMMITTED和SERIALIZABLE。

        默认为READ COMMITTED
 

    设置隔离级别

           alter session set isolation_level=serializable;--如果需要演示 必须每个客户端都要执行







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值