在Oracle中,有多种类型的表,每种表都有不同的特性。可能能使处理速度更快、磁盘占用空间更少。
一般的表是指关系表。也可以是对象表,通过用户定义的数据类型生成,临时表用于存储某个事务或者会话的临时数据。
Oracle常用内置数据类型:
1.字符类型
char数据类型,用于存储固定长度的字符串。当值的长度未达到设定长度时,oracle自动填充空格。
varchar2数据类型,用于存储变长的字符串。按照实际长度存储数据,不会填充空格。在多数时候,使用varchar2,而不使用char。
2.数值类型
number,具有精度(precision)和范围(scale)。精度指所有数字的个数。范围是指小数的位数。如number(5,2),5.678123,实际上存储的值为5.69
3.日期时间类型
date,默认日期和时间格式由nls_date_format指定,默认DD-MM-YY
4.lob类型,存放大型、未被结构化的数据。最大128MB。
blob:存储二进制对象,包括图像、音/视频文件等。
clob:存储字符串格式的大型对象。oracle首先转换成unicode格式的编码,再存储。
bfile:存储二进制格式文件。字段仅保存二进制文件的指针,并且是只读,不能通过数据库修改。
5.rowid类型
rowid,伪列类型,表示每条记录的物理地址。因此利用rowid访问数据的速度最快。
oracle创建表:
create table table_name(
);
也可以
create table table_name
as select * from other_table_name;
数据库表的特性决定了系统如何创建表、在磁盘上如何存储、使用时如何执行等。用4个常用参数来说明
1.存储参数
针对本地化管理的表空间,盘区管理为自动时,可以使用storage子句指定initial,next,minextents。只有initial起作用,表示设置表分配的数据段初始化盘区大小。单位为kb或mb。
create table table_name(
)tablespace tablespace_name
storage(initial 256k);
2.数据块管理参数
pctfree和pctused参数。若段管理方式为手动管理segment space management manual,则可设置此二参数。pctfree默认为10。若设置过高,造成磁盘浪费,若太低,则可能造成数据块太小,无法容纳一行记录而产生迁移记录和链接记录。
pctfree和pctused的值,一般<=100,一般来说,二者的和与100的差值越大,存储效率就越高。
一般,当update多时,pctfree大点,pctused小点,推荐20和40。当insert和delete多时,推荐5和60。
create table table_name(
)tablespace tablespace_name
storage(initial 256k)
pctfree 20
pctused 40;
initrans参数。指定一个数据块所允许的并发事务数目。当一个事务访问一个数据块,就会在该数据块头部保留一个条目,当事务结束,就会删除该条目。
oracle分配的initrans个事务条目空间是永久的。当数据块的该空间满了后,再有事务访问此数据块时,会在空闲去保留该条目,这部分空间是动态的。
create table table_name(
)tablespace tablespace_name
storage(initial 256k)
pctfree 20
pctused 40
initrans 10;
3.重做日志参数
在创建表时,使用nologging,则对该表进行DDL操作时,不会产生日志,但仍会记录DML操作。
使用nologing,可以节省日志文件的空间,并减少创建表的时间,但是不能通过恢复的操作来恢复丢失的数据。
create table table_name(
)tablespace tablespace_name
storage(initial 256k)
pctfree 20
pctused 40
initrans 10
nologging;
4.缓存参数
cache参数。在创建表时,对于小又常用的,可以使用cache子句。
维护数据库表:
1.增加、删除字段
alter table test add (name varchar2(50));
alter table test drop column name;
alter table test drop column (name,age);
删除大型表的字段时,可能费时。
2.修改字段
alter table test modify name varchar2(60);
在修改字段时,注意:从一种数据转为兼容性数据,且长度只能变长。但当数据库中没数据时,毋须注意前两点。
3.重命名表
alter table test rename to test_new;
4.修改表空间
alter table test move to tablespase tsp2_new
5.修改存储参数
alter table test pctfree 25 pctused 45
6.删除表
drop table test [cascade constraints];
[cascade constraints] 表示同时删除约束、视图和触发器。
一般来说,当删除表时,没有被实际删除,只是在数据字典中除名,并放到了回收站,仍占有空间。可以通过flashback table还原。
查看表示否在回收站
select object_name,original_name from recyclebin where original_name='test'
还原表
flashback table test to before drop;
7.修改表状态
改为只读READ ONLY状态,不能进行DML和某些DDL。
alter table test read only;
11g以前若只读,只能将表空间或者整个数据库置为只读。
置为可读写
alter table test read write;