您的位置:首页 > 其它

第十一章数据操作与事务控制课堂笔记和练习

2018-08-02 12:49 537 查看
– 数据操作语言:DML(Data Manipulation Language) :insert update delete
  • 插入数据 insert

    – 语法:insert into 表名(列名1,[列名2….]) values(值1,[值2…..])
    – 注意:
    – 列名列表与值列表个数、数据类型保持一致
    – 字符类型与日期类型用”单引号引起来
    – 列名列表可省略,则需要向所有列赋值

      插入单行数据

      --  隐含法:在列名列表中忽略该列
      --  向dept表新增一个部门
      insert into dept(deptno,dname) values(50,'baby');
      
      --  显示法:指定 null关键字或者''
      --  向dept表新增一个部门
      insert into dept values(50,'baby','');
      
      --  不指定列
      --  向dept表新增一个部门
      insert into dept values(50,'baby','beijing');
      
      --  插入日期值
      --  sysdate 系统当前时间
      insert into emp (empno,hiredate) values (3322,sysdate);
      
      --  插入指定日期
      insert into emp (empno,hiredate)
      values (3322,to_date('2018-07-30','yyyy-mm-dd'));
      
      --  插入特殊字符'&'(有变量的含义)
      insert into dept (deptno,dname,loc)
      values (24,'&' || 'hello','shanghai');
    1. 插入多行数据

      --  创建表 create table
      --  创建表manager,并且结构与emp表一样
      create table manager as select * from emp;
      --  复制表结构与数据
      
      create table manager as select * from emp where 1=0;
      --  复制表结构
      
      --  向manager表中插入emp表中职位为manager的员工信息
      insert into mannager select * from emp where job = manager;
  • 修改数据 update
    – 语法: update 表名 set 列名=新值,[列名1=新值1…] where 限制条件

      修改指定数据

      --  把工号为7782的部门编号修改为20
      update emp set deptno = 20 where empno = 7782;
    1. 修改所有记录

      update emp set deptno = 20;
    2. 一次修改多列

      update emp deptno = 20,sal = sal + 100 where deptno = 10;
    3. 嵌入式查询修改

      update emp set deptno = 20,
      sal = sal + (select avg(sal) from emp)
      where deptno = 10;
    4. 相关更新update

      --  在emp表中增加一个列dname,用来存储部门名称
      alter table emp add(dname varchar2(14));
      
      --  使用相关子查询更新dname列为正确的部门名称
      update emp e
      set dname =
      (select dname
      from dept d
      where deptno = e.deptno);
    5. 修改记录时的完整性约束错误

      --  把部门编号为10的员工,部门编号调整为55
      update emp set deptno=55 where deptno=10;
      --  错误 未找到父项关键字  外键(emp.deptno)对应的值
      ->  不在主键(dept.deptno)范围之内
  • 删除数据 delete
    – 语法: delete [from] 表名 where 限制条件
    – 注意:用delete删除表只是删除表的数据且可回滚,保留表的结构和对事务提交的确认

      删除选中记录

      --  删除职位是CLERK的员工记录
      delete from emp
      where job = 'CLERK';
    1. 删除全部记录

      --  删除所有员工记录
      delete from emp;
    2. 基于另一个表删除本表记录

      --  在DELETE语句中使用子查询可以基于另一个表删除本表记录。
      --  删除部门SALES的员工记录。
      delete from emp
      where deptno =
      (select deptno
      from dept
      where dname ='SALES');
    3. 相关删除 delete

      --  删除曾经做过入职的员工记录
      DELETE FROM emp e
      WHERE 0 <
      (SELECT count(empno)
      FROM emp_jobhistory
      WHERE empno = e.empno);
      
      --  删除没有员工的部门记录
      DELETE FROM dept d
      WHERE not exists
      (SELECT empno
      FROM emp
      WHERE deptno = d.deptno);
– 事务处理语言:TPL(Transaction Process Language):commit rollback

– 一组SQL语句的管理单元(针对增、删、改语句做事务管理)

  • 四个特性:
    – 1.原子性:所有sql语句执行成功都成功,任意一个失败,全部必须执行失败(回滚00 )
    – 2.一致性:不论失败或成功,数据库数据保持一致性
    – 3.隔离性:事务之间相互独立,互不影响
    – 4.持久性:事务一旦被提交,永久保存在数据库中,无法撤回

  • 事务组成:
    在数据库中,事务由一组相关的DML或SELECT语句,加上一个TPL语句(COMMIT、
    ROLLBACK)或一个DDL语句(CREATE、ALTER、DROP、TRUNCATE等)或一个DCL(GRANT、REVOKE)语句

  • 事务开始:当上一个事务结束,第一个新的DML(增删改)语句执行开始,事务开始

  • 事务结束:

      显示结束:

      --显示结束:事务提交commit
      insert into dept(deptno,dname,loc) values(50,'开发部','北京');
      commit;--提交事务(增删改操作均需要提交事务)
      
      --显示结束:事务回滚rollback
      insert into dept(deptno,dname,loc) values(60,'运维部','北京');
      insert into dept(deptno,dname,loc) values(70,'IT部','北京');
      rollback;--回滚事务
    1. 隐式结束:

      --  隐式提交:执行DDL 或 DCL 或 从SQL*PLUS正常退出
      --  隐式回滚:从SQL*Plus中强行退出
      --  客户端连接到服务器端异常中断
      --  系统崩溃
  • 设置保存点

    insert into dept(deptno,dname) values(80,'实施部');
    savepoint point1;--设置保存点1
    insert into dept(deptno,dname) values(90,'测试部');
    insert into dept(deptno,dname) values(91,'需求部');
    savepoint point2;--设置保存点2
    insert into dept(deptno,dname) values(92,'产品部');
    savepoint point3;--设置保存点3
    
    --回滚到保存点1的位置
    rollback to point1;
    
    commit;--提交事务
    rollback; -- 回滚提交,事务已经被提交,回滚无效
  • 锁: 表级锁 与 行级锁

      行级锁:当用户在会话1中对数据进行DML操作时,
      – 如果事务没提交或回滚,当前行数据将被锁定
      – 当用户执行完commit或rollback之后,其他会话才能执行该行的DML(SQL增删改)操作

    1. 表级锁:当用户在会话1中对数据进行DML操作时,其他会话不允许对该表进行DDL(列删除、表删除、或表修改)操作

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: