zoukankan      html  css  js  c++  java
  • 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

    喜欢请点关注❤️ ❤️ ❤️
  • 相关阅读:
    User Get 'Access Denied' with Excel Service WebPart
    How To Search and Restore files from Site Collection Recycle Bin
    How To Collect ULS Log from SharePoint Farm
    How To Restart timer service on all servers in farm
    How to Operate SharePoint User Alerts with PowerShell
    How to get Timer Job History
    Synchronization Service Manager
    SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search
    0x80040E14 Caused by Max Url Length bug
    SharePoint 2007 User Re-created in AD with new SID issue on MySite
  • 原文地址:https://www.cnblogs.com/ovins/p/15376387.html
Copyright © 2011-2022 走看看