• 1.7 Oracle数据库学习教程-集合运算&数据处理


    Oracle数据库学习教程

    集合运算&数据处理

    集合运算

    问题:查询部门号10和20的员工的信息:

    1. select * from emp where deptno in(10,20);
    2. select * from emp where deptno = 10 or deptno = 20;
    3. 集合运算

    集合运算的对象是两个集合
    常用的有: (A igcap B),(A igcup B),(A-B)

    • 并集:union/union all
    • 交集:intersect
    • 差集:minus

    上面的问题改写为集合运算版本:

    
        select * from emp where deptno = 10
        union
        select * from emp where deptno = 20;
    
    

    20211007140614

    注意事项:

    1. 参与运算的各个集合必须列数相同,类型一致
    2. 表头采用第一个集合的
    3. 会先执行带()的语句

    数据处理

    0. SQL语言类型

    1. DML语句(数据操作语言): insert,update,delete,select
    2. DDL语句(数据定义语言): create table,create view(视图),create index(索引),create sequence(序列)
    3. DCL语句(数据控制语言):grant(赋权),revoke(回收权限)

    1. 插入数据insert

    insert into table[列1..] values (值1...);
    如:

    
    insert into emp values (1001,'TOM','Engineer',7839, sysdate,5000,200,10);
    
    insert into emp(empno, ename, sal, deptno) values(1002, 'Marry', 6000, 20);
    
    

    1. &地址符:
    SQL> insert into emp(empno, ename, sal, deptno) values(&empno, &ename, &sal, &deptno);
    加上&符号,下次输入/号就可以继续赋值了,&后面的可以任意写,一般和前面相同

    2. 批处理:

    先创一张相同结构的表,不要有数据(where 假):
    create table emp10 as select * from emp where 1=2;

    然后插入一批数据:
    insert into emp10 select * from emp where deptno=10 ;

    20211007143103

    2. 更新数据

    更新操作一般会使用where来改一部分数据

    update emp10 set sal=4000, comm=300 where ename = 'CLARK'; ( 或 where empno=7782; )
    20211007143310

    删除数据delete

    delete from emp10 where empno=7782;(或ename= 'KING');

    注意:“from”关键字在Oracle中可以省略不写,但MySQL中不可以。

    delete和truncate的区别:

    1. delete是删除一条数据,而truncate是先摧毁表再重建.
    2. delete性能更优.
    3. delete不会释放空间,truncate会释放空间
    4. delete可以回滚,truncate不能回滚.
    5. delete会产生碎片,truncate不会.

    事务

    数据库事务,是由有限的数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行。
    要么都成功,要么都失败.

    比如银行转帐,A转1000给B:1.A-1000,2.B+1000.这两步要捆绑一起.
    成功了就commit提交,失败了就rollback回滚

    事务的特性:
    事务4大特性(ACID) :原子性、一致性、隔离性、持久性。

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

    事务的结束标志:提交、回滚都是事务的结束标志。
    提交:

    • 显示提交:commit
    • 隐式提交:
      • 有DDL语句,如:create table除了创建表之外还会隐式提交Create之前所有没有提交的DML语句。
      • 正常退出(exit / quit)

    回滚:

    • 显示回滚:rollback
    • 隐式回滚:掉电、宕机、非正常退出。

    还可以增加保存点(savepoint),相当于存档.可以使用rollback回滚到指定的保存点.

    20211007154558

    隔离级别:

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

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

    20211007153714

    Oracle支持的隔离级别: Read Commited(默认)和 Serializable,以及Oracle自定义的Read Only三种。
    Read Only:由于大多数情况下,在事务操作的过程中,不希望别人也来操作,但是如果将别人的隔离级别设置为Serializable(串行),但是单线程会导致数据库的性能太差。是应该允许别人来进行read操作的。

    mysql支持以上四种, Oracle默认读已提交数据,mysql默认可重复读。

    本文来自博客园,作者:Ovins,转载请注明原文链接:https://www.cnblogs.com/ovins/p/15376387.html

    喜欢请点关注❤️ ❤️ ❤️
  • 相关阅读:
    Django(二)
    VSCode写Django的坑
    AXF—个Django项目
    Linux
    安装软件方面的问题及解决方法杂烩
    Python
    环境搭建
    Django(一)
    关于excel表
    (十)selenium实现微博高级搜索信息爬取
  • 原文地址:https://www.cnblogs.com/ovins/p/15376387.html
Copyright © 2020-2023  润新知