Oracle 11g系列—5—Oracle中的表
来源:互联网 发布:软件开发教学 编辑:程序博客网 时间:2024/04/28 00:40
前言
表是最常用的模式对象,也是最重要的数据对象之一。甚至在很多时候,我们说到数据库操作,就以为对数据库中的表的操作,而忘记了还有很多其他的操作对象,比如试图、存储过程等等。表示存储数据的有效手段,因此对表的管理非常重要。还可以在表中定义约束,可以保证数据的有效性和完整性。
一。创建表
在Oracle数据库中,用户可以根据用户不同的需求创建不同类型的表,常用的表类型有如下:
类型说明堆表数据按照堆组织,一无系方式存放在单独的表字段中,也是标准表,我们平常用的都是堆表。索引表数据以B树结构,存放在主键约束所对应的索引段中 簇表簇有共享相同数据库的一组表组成。在某些情况下,使用簇表可以节省存储空间。分区表数据被划分为更小的部分,并且存储到相应的分区段中,每个分区可以独立管理和操作。
1.1 数据类型
数据类型
参数
描述
char(n)
n=1 to 2000字节
定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
varchar2(n)
n=1 to 4000字节
可变长的字符串,具体定义时指明最大长度n,
这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。
如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,
如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。
可做索引的最大长度3209。
number(m,n)
m=1 to 38
n=-84 to 127
可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
如:number(3,0),输入575.316,真正保存的数据是575。
date
无
从公元前4712年1月1日到公元4712年12月31日的所有合法日期,
long
无
可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
raw(n)
n=1 to 2000
可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
long raw
无
可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
blob
clob
nclob
无
三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
可以执行读取、存储、写入等特殊操作。
bfile
无
在数据库外部保存的大型二进制对象文件,最大长度是4GB。
这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
Oracle 8i可以读取、查询BFILE,但是不能写入。
大小由操作系统决定。
我也把这个整理了一份文档,在文章末尾的时候 可以把它download下来!~。
1.2创建表的语法
Create table [schema,] table_name(
column_name data_type [default express] [constraint]
[,column_name data_type [default express] [constraint]]
[,column_name data_type [default express] [constraint]]
);
上面的一些解释,需要明白下,[]表示这在创建表的时候是可选的。而没有[]这个东西表明在创建的时候 是必须要写的!~~~比方说[constraint] 这个给当前列加约束,那么约束是可以加或者不加的!
Scheme:指定表所属的用户名或者所属的用户模式名称。
table_name:顾名思义,就是表名。
column_name:列名
data_type:数据类型,就像在1.1中的写的。
default express:默认值。
constraint:添加列的约束,表示该列必须要满足的规则。
比如:
not null表示非空,就是这个字段不能为空。
1.3查看表信息
当我们创建了表之后,可以通过describe(简写desc)进行查看表的结构。如下:
这个命令很有用,特别是在我们运用数据字典的时候,因为你刚开始不知道这个数据字典里的字段。
当然,我们还可以通过查询数据字典试图user_tables 来查询表的有关信息!
这个只是表明有这个表,那如果要查看表的结构呢,就像和desc一样呢?那么你可以用到user_tab_columns数据字典,如下:
1.4指定表的模式
在上面创建表的语法中,有一个是scheme的字段!~,它就是指定表的模式。用来表示所属的用户名或者所属的用户模式名称。如下图:
1.4指定重做日志
在创建表的时候,如果使用Logging字句,则表示对表的所有操作都将记录到重做日志中。
接着,我们在数据字典里user_tables进行查看 是否果真如此,如下:
当然你也可以使用nologging这个,表示不需要日志!~
1.5指定缓存
如果一个用户请求的数据是最近才开始使用的,那么这个数据最有可能存放在缓冲中。那么有人可能会问,在缓冲有什么好处呢?其实,好处是大大滴好。因为在缓冲的话,下次要在次读取数据的话,就不需要从磁盘中读了,直接从缓冲力拿 不是很方便吗?
创建表的时候,可以用cache关键改变这种结果。 哦 对了,Oracle 是使用LRU(least Recently Userd)来管理缓冲的。如果在表的后面加上cache的话,那么Oracle在执行LRU的时候,就不会把这个表相关的数据给换出去。如图:
二。修改表
创建了表之后,那当然就需要对表进行维护咯!
2.1增加和删除列
①增加列
语法是:
alter table 表名 add 列名 数据类型
②删除列
语法如下:
alter table 表名 drop column 列名
你也可以同时删除几个,那么列名需要用()起来~~
alter table 表名 drop column (列名1,列名2.。。)
比如:alter table mybook3 drop column publicdata; 就把刚的那列删除了。
2.2使用unused
如果对一个表删除大量的数据,由于需要对每个列的记录进行处理,所以删除的速度可能会很慢。这个时候,我们可以使用关键字unused来代替这个操作!~啥意思呢?其实这在用户的角度来说,这个和删除是没有分别的,只是被标记为unused的字段依然留在数据库中,可以想象为被注释了,实质上空间并没有释放。
语法:
alter table 表名 set unused(列名);
通过数据字典user_unused_col_tabs可以查看数据中的有哪些字段被标记为unused。
当然 也可以删除这个标记,语法如下:
alter table 表名 drop unused 列名
2.2更新列
有时候,我们创建了表之后,发现需要对一些字段进行修改,比如更新列名、列的数据类型、数字列的精度以及列的默认值等等。
①修改列名
更新列的语法:
alter table 表名 rename column 老的列名 to 新的列名
②修改列的数据类型
在我们修改数据类型的时候,我想要注意2点:
☆在表里有数据的情况下,一般情况下我们无需把数据的长度由短向长的改变,为什么呢?很简单啊,会精度丢失呀!~但是你可以这么做,只是你要知道后果。
☆当表里没数据时,那就可以逆向进行改变了。
语法如下:
alter table 表名 modify 列名 新的数据类型
修改列的精度 也是一样道理!
③修改列的默认值
语法如下:
alter table 表名 modify(列名 default 默认值)
2.3重命名表
语法:
alter table 表名 rename to 新表
这个很简单。
NOTE;对表进行重命名很简单呢,但是不建议这样用。因为这样做的影响非常的大。虽然Oracle可以自动更新数据字典中表的外键、约束和表关系等,但是还不能更新数据库中的存储代码等等。所以,需要谨慎使用。
2.4删除表定义
如果用户需要删除所创建的表的定义,可以使用如下语法:
drop table 表名 [cascade constraints | purge]
我们需要知道的是删除表定义和删除表数据的区别,
删除表定义,删除表的结构和数据都不存在。
删除表数据,只是删除数据但是结构还在。
在使用drop table语句的时候 ,可以使用如下2个参数:
★cascade constraints
表示在删除表,不仅删除本表,而且删除所有应用这个表的试图、约束等等。因为有些表因为关系(比如外键,这个下个章节会说),所以删除不了,会提示有错,那这个时候你需要使用这个。
我新建2个表:
班级表:myclass
学生表:
ok,我们有了上面的环境之后,我们往2个表中随便插入一些数据。然后,我现在删除myclass表,结果如下:
现在,我们把cascade constraints 这个加上,结果如下:
★purge
表示在删除表定义之后,立即释放该表所占用的资源空间。
语法
drop table 表名 purge;
- Oracle 11g系列—5—Oracle中的表
- Oracle 11g系列—4—Oracle的体系结构
- Oracle 11g系列—1—基础回顾
- Oracle 11g系列—2—用户管理
- Oracle 11g系列—7—SQL 基础学习
- Oracle 11g系列:数据库
- Oracle 11g系列:约束
- Oracle 11g系列:视图
- Oracle 11g系列—6—Oracle中表的约束
- oracle 11g中的 oracle restart特性
- Oracle 11g 新特性 系列小结
- Oracle 11g RAC 系列读书笔记
- Oracle 11g 新特性 系列小结
- Oracle 11g系列:数据表对象
- Oracle 10g 11g新特性系列-视频分享
- Oracle 11g系列—3—SQL*Plus运用与OEM简介
- Oracle 11g系列—8—SQL语句编写规范
- 【oracle】——Fedora下安装配置oracle 11g
- MFC对话框最小化到托盘编程实现步骤
- 一道著名的毒酒问题
- Java日期格式化类SimpleDateFormat
- sock_raw
- 通向架构师的道路(第二天)之apache tomcat https应用
- Oracle 11g系列—5—Oracle中的表
- 设置tomcat自动启动
- Mac上简单常用Terminal命令
- APCS,ARM 过程调用标准(ARM Procedure Call Standard)
- Oracle分析函数总结(2) - 排序 - rank,dense_rank,row_number,first,first_value,last,last_value,lag,lead
- DBLINK详解(转)
- Oracle 11g系列—6—Oracle中表的约束
- wxWidgets中wxStaticBitmap放缩不正常,引起其他控件放缩不正常
- javascript 小技巧