oracle/PL/SQL编程(2)

一、锁(Lock)

(1)行级锁

  当sql语句进行DML(insert delete update)操作时,会自动启动锁,例如:update emp set sal = sal-100 where empno = 7788;

如果不执行conmit或rollback语句否则不会释放锁,也就是再次做update语句的时候,就会进入等待状态。

(2)表级锁

  表级锁是对一个表进行锁定,加了表级锁的可以被其他事物读取,但不可以进行DML操作。

  ❶共享锁(share):语法

  LOCK TABLE emp,dept IN SHARE MODE;

  多个用户可以同时对一个表加共享锁

  ❷排他锁(exclusive):语法

  LOCK TABLE emp,dept IN EXCLUSIVE MODE;

  多个用户不可以同时对一个表加排他锁

二、分区(PARTITION)

  当数据大影响效率的时候,可以对一个表进行分区操作,我们先创建一个表

  CREATE TABLE sales_record

  (

    sr_id NUMBER PRIMARY KEY,
    sr_price NUMBER,
    sr_date DATE

  )

(1)范围分区:语法

  ❶根据价格分区:

  PARTITION BY RANGE(sr_price) -- 根据sr_price的取值范围进行分区

  (

    PARTITION p1 VALUES LESS THAN(1000),--sr_price少于1000的记录为p1区

    PANTITION p2 VALUES LESS THAN(2000),--sr_price1000~2000的记录为p2区

    PANTITION p3 VALUES LESS THAN(3000),--sr_price2000~3000的记录为p3区

  )

  ❷根据时间分区:

  PARTITION BY RANGE(sr_date) -- 根据sr_data的取值范围进行分区

  (

    PARTITION p1 VALUES LESS THAN(to_date('2016','yyyy')),--sr_date小于2016的记录为p1区

    PANTITION p2 VALUES LESS THAN(to_date('2017','yyyy')),--sr_date2016~2017的记录为p2区

    PANTITION p3 VALUES LESS THAN(MAXVALUE),--sr_date2017~最大值的记录为p3区

  )

  可以查询分区:SELECT * FROM sales_record PARTITION p1; -- 查询分区为p1的数据

(2)维护分区

  ❶删除分区

    ALERT TABLE sales_record DROP PANTITION p1;

  ❷截断分区

    ALERT TABLE sales_record TRUNCATE PARTITION p1;

  ❸合并分区

    ALERT TABLE sales_record MERGE PARTITION p1,p2 INTO p5;

  ❹拆分分区

    ALERT TABLE sales_record SPLIT PARTITION p3 INTO(p3,p4);

posted on 2018-02-08 12:37  都是妖怪吧  阅读(88)  评论(0)    收藏  举报

导航