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);
浙公网安备 33010602011771号