码迷,mamicode.com
首页 > 其他好文 > 详细

表和锁分区

时间:2017-12-13 11:49:53      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:建表   ble   内蒙古   创建表   控制   primary   散列   释放   sel   

概念:是数据库用来控制共享资源并发访问的机制,用来保护正在被修改的数据直到提交或回滚了事务之后,其他用户才可以更新数据

类型:

1、行级锁:排他锁,防止其他事务修改此行

当使用 insert,update,delete,select...for update语句oracle会自动上锁,可以锁定有一行或者多行,使用commit或rollback释放锁

2、表级锁:锁定整个表,限制其他用户对表的访问

Lock table table_name

分区

事务(重点):

1、原子性:事务是一个整体,不能分割

2、一致性:事务之前和事务之后数据一致

3、隔离性:事务之间互不影响

4、永久性

分区方法:

  1. 范围分区

概念:以表中的一个列或者一组列的值得范围进行映射到分区

案列:创建customer表,根据表中cus_id的范围创建分区

create table customer(

   cus_id number primary key,

   cus_name varchar2(20) not null,

   cus_email varchar2(30),

   cus_phone char(11)

)

partition by range(cus_id)(

  partition cus1 values less than(100),

  partition cus2 values less than(200),

  partition cus3 values less than(300),

  partition cus4 values less than(maxvalue)

);

drop table customer;

insert into customer values(1,‘jack‘,‘132@qq.com‘,‘343‘);

insert into customer values(101,‘susan‘,‘132@163.com‘,‘222‘);

insert into customer values(201,‘leo‘,‘132@yahu.com‘,‘234‘);

--增加分区:错误,分区范围是递增的,增加的分区必须高于最后的分区

alter table customer add partition cus4   values less than(500);

select *   from customer;--查询表的数据

select *   from customer partition(cus1);-查询分区表中的数据

 

  1. 散列分区

概念:允许用户对不具有逻辑范围的数据进行分区,通过在分区键上执行Hash函数决定存储的分区,将数据平均分配到不同的分区。

案列:

--创建表

create table hash_table(

  col number,

  inf varchar2(100)

)

--编写分区

partition by hash(col)(

  partition p1,

  partition p2,

  partition p3,

  partition p4

);

--在表中插入值

insert into hash_table values(1,‘优秀‘);

insert into hash_table values(101,‘良‘);

insert into hash_table values(301,‘中等‘);

insert into hash_table values(501,‘及格‘);

--查询表中的值

select *   from hash_table;

--查询表分区的值

select * from hash_table partition(p4);

 

  1. 列表分区

概念:允许用户将不相关的数据组织在一起

案列:创建Student表,通过地区建立分区

create table student(

  stu_id number,--学生学号

  stu_name varchar2(20),--学生姓名

  stu_area varchar2(30)--地区

)

partition by list(stu_area)(

   partition part1 values(‘湖南‘,‘湖北‘,‘江西‘,‘贵州‘,‘广西‘),

   partition part2 values(‘辽宁‘,‘沈阳‘,‘大连‘,‘北京‘,‘内蒙古‘),

   partition part3 values(‘江苏‘,‘广州‘,‘上海‘,‘重庆‘)

);

--主健约束,非空且唯一

alter table student add constraint   s_id primary key(stu_id);

--插入值

insert into student values(1,‘jack‘,‘湖南‘);

insert into student values(101,‘susan‘,‘北京‘);

insert into student values(201,‘anson‘,‘大连‘);

insert into student values(301,‘leo‘,‘上海‘);

--查询表中的值

select *   from student;

--查询表分区的值

select * from student partition(part1);

 

  1. 复合分区

概念:范围分区与散列分区或列表分区的组合

select *   from student partition(part1);

drop table sales;

create table sales(

  pro_id varchar2(20),--商品编号

  sales_date date,

  sales_cost number,

  status varchar2(20)--商品属性,是否收货

)

partition by range(sales_date) subpartition by list(status)(

   partition p1 values less than(

   to_date(‘2017-1-1‘,‘yyyy-mm-dd‘))(

     subpartition p101 values(‘已收货‘),

     subpartition p102 values(‘未收货‘)    

   ),

   partition p2 values less than(

   to_date(‘2017-6-1‘,‘yyyy-mm-dd‘))(

     subpartition p201 values(‘已收货‘),

     subpartition p202 values(‘未收货‘)    

   ) 

);

--插入值

insert into sales values(‘牛仔裤‘,to_date(‘2017-2-2‘,‘yyyy-mm-dd‘),38,‘已收货‘);

insert into sales values(‘毛衣‘,to_date(‘2017-1-2‘,‘yyyy-mm-dd‘),28,‘未收货‘);

insert into sales values(‘卫衣‘,to_date(‘2016-2-2‘,‘yyyy-mm-dd‘),30,‘已收货‘);

insert into sales values(‘羽绒服‘,to_date(‘2017-5-1‘,‘yyyy-mm-dd‘),38,‘已收货‘);

--查询分区值

select * from sales partition(p1);

分区维护的类型:

1、计划事件-定期删除最旧的分区

2、非计划事件-解决应用程序或者系统问题

分区维护操作:

1、添加分区:在最后一个分区之后添加一个新的分区

alter   table customer add partition p5 values less than(value);

2、删除分区:删除一个指定的分区,分区数值也随之删除

alter   table customer drop partition p5;

--删除复合分区中的自分区

alter   table sales drop subpartition p202;

3、截断分区:删除指定分区中的所有记录

alter table   customer truncate partition   cus1;

--搜索分区cus1中的值

select * from   customer partition(cus1);--结果显示无值

4、合并分区:将范围分区或复合分区的两个相邻分区连接起来

--将sales表中子分区p101,p102合并在子分区p101中

alter table   sales merge subpartitions p101,p102 into subpartition p101;

--将sales表区分区中p1,p2合并在分区p1中

alter table   sales merge partitions   p1,p2 into partition p2;

拆分分区:将一个大分区的记录拆分到两个分区中

--customer表的cus4分区拆分成p41,p42分区,小于1500在分区p41中,大于1500的在p42分区中

alter table   customer split partition   cus4 at(1500) into(partition p41,partition p42);

--插入数值

insert into   customer values(1601,‘yy‘,‘23‘,‘343‘);

--搜索分区p42的值

select * from   customer partition(p42);

 

总结:

1、一个表中只能有一个partition子句,且分区中的元素不能有冲突

2、范围分区中的范围数是递增的,如果增加一个分区,范围必须大于最高的分区范围

3、如果希望增加一个分区,范围在分区范围中间,选择拆分分区

 

表和锁分区

标签:建表   ble   内蒙古   创建表   控制   primary   散列   释放   sel   

原文地址:http://www.cnblogs.com/yuxi12/p/8031236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!