暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 创建和管理表、集群和序列

自学Oracle 2018-07-03
776

创建表

1、describe 表名  --查看表结构

定义列的时候变长字符数据类型必须指定最大长度,number可以是最高精度(最高到38位),也可以是指定的精度。

2、字符宽度和数值精度

char列的最大字符宽度是2000个字符。varchar2列可以有最多32000个字符。

数值精度
insert语句中的值表中的实际值
精度为number(4,1)123.4123.4
123.44123.4
123.445123.5
12345.6插入失败
精度为number(4)123.4123
123.44123
123.5124
12345.6插入失败
精度为number(4,-1)123.4120
123.5120
125130
12345插入失败
精度为number123.4123.4
123.5123.5
125125
1234512345

3、创建表时可以加几种不同的约束。包括:候选键、主键、外键以及检查条件。有两种指定约束的方法,一种方法是作为列定义的一部分定义(称为列约束),另一种方法是在create table 语句的末尾定义(称为表约束)。限制多个列的子句必须是表约束。

①候选键(candidate key)是一列或多列的组合,其值唯一地标识了表中的一行。

constraint XXXX unique(XXX,XXX...);

②主键(primary key)是具有某些特殊性质的候选键之一。

constraint XXXX primary key;

4、指定索引表空间

create table test(

id number(5,2),

name varchar2(20),

constraint id_pk primary key (id) using index tablespace users);

①外键(foreign key)是基于另一个表的主键值的列的组合。

constraint XXXX foreign key(aaa) references category (aaa);

 ②check 约束

许多列必须具有处于某个范围或满足某些条件的值。

create table test(id number(1) check (id<=100));


删除表

drop table test;删除表仍然保留了表的空间,它们只是暂时通过“回收站”来访问。

drop table test purge; 删除表同事把它从“回收站”中清除。

如果表已经被删除,可以从“回收站”中清除所占的空间。

purge table test;

清除“回收站”中的所有内容:

purge recyclebin;

截断表

truncate table trouble;


更改表

添加列 alter table test add(age number(2) not null );

修改列alter table test modify(age null );

添加或修改列的规则

  • 可以随时增加字符列的宽度。随时增加number列的数字位数。随时增加或减少number列中的小数位数,对于减少的情况需要表为空。

  • 可以更改该列的数据类型。减少字符列的宽度。减少number列的数字位数。

创建只读表

alter table test read only;

alter table test read write;

更改当前使用的表

alter session set ddl_lock_timeout=60;

创建虚拟列

可以在表中创建虚拟列,而不是存储派生的数据。虚拟列可以基于同一行中的其他值(例如,将两列加起来)。在以前的版本中,需要创建视图来执行创建列值必须的函数。在oralce 11g 和12c中,可以将函数指定为表定义的一部分,这样就可以对虚拟列创建索引,并通过虚拟列创建分区表。

generated always as (xxxx) virtual

删除列

alter table test drop column age ;

也可以标记为"unused"

alter table test set unused column xxxx;

若标记一列为"unsed",则在删除该列之前不会释放此列以前占用的空间。

alter table test drop unused columns;

可以查询user_unused_col_tabs,all_unused_col_tabs以及dba_unused_col_tabs来查看所有其中含有标记为“unused”的列的表。

可以利用一条命令删除多列

alter table test drop(xxx,xxx);

如果删除的列是主键约束或唯一约束的一部分,那么在alter table 命令中必须使用cascade constraints子句。如果删除属于主键的列,oracle将同时删除该列和相应的主键索引。


根据一个表创建另一个表

create table test2 [nologging] as  select * from test;

注意:所选的列中有long数据类型,创建将失败。不会为新表自动创建源表上的约束,包括NOT NULL约束。

可以使用nologging改善向表中加载数据操作的性能。但创建完应该及时备份数据库。


创建索引组织表

索引组织表能根据表的主键列值对数据进行排序。索引组织表存储数据时就像整个表存储在一个索引中那样。索引有两个主要用途:

强制唯一性 在创建primary key 或unique约束时,Oracle创建索引来强调索引列的唯一性。

改善性能 当某个查询使用索引时,此查询的性能将得到显著改善。

索引组织表允许在索引中存储整个表的数据。普通的索引只存储索引列,而索引组织表则在索引中存储表中的所有列。

create table test (id number,name varchar2(20),consrtaint id_pk primary key(id,name ) organization index;

当主键由表中的大部分列构成时,使用索引组织表是最有效的。


集群

集群是存储表的一种方法,这些表密切相关,并经常一起连接到磁盘的同一区域。例如表 a 和表b 的数据行可以交错插入到称为集群的单个区域中,而不是将两个表放在磁盘上的不同扇区中。集群键可以是一列或多列,通过这些列通常可以将这些表在查询中连接起来。为了将表集群在一起,必须拥有这些将要集群在一起的表。

create cluster clustername (column datatype [,column datatype]...)[other options];

clustername 遵循表的命名约定,clustername将作为集群键使用的名称和数据类型。列名可以与将要放进集群中的表的一个列名相同,或为其他任何有效的名称。


序列

使用序列可以把唯一的数值分配给数据库中的列。不需要创建特殊的表和代码来记录使用中的唯一的数值。

create sequence customer_id increment by 1start with 1000;

使用nextval确保序列的值不断增加并保证获得唯一号码,此数值就会存储在currval中,以便在别的地方使用。



本公众号是个人学习工作笔记,希望大家发现问题能及时和我本人沟通,希望你与我共同成长。个人微信zgtj12306。

 

欢迎关注“自学Oracle”


文章转载自自学Oracle,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论