Oracle中表的非常全面的操作
一。创建表
在Oracle数据库中,用户可以根据用户不同的需求创建不同类型的表,常用的表类型有如下:
类型 | 说明 |
堆表 | 数据按照堆组织,一无系方式存放在单独的表字段中,也是标准表,我们平常用的都是堆表。 |
索引表 | 数据以B树结构,存放在主键约束所对应的索引段中 |
簇表 | 簇有共享相同数据库的一组表组成。在某些情况下,使用簇表可以节省存储空间。 |
分区表 | 数据被划分为更小的部分,并且存储到相应的分区段中,每个分区可以独立管理和操作。 |
1.1 数据类型
数据类型 |
参数 |
描述 |
char(n) |
n=1 to 2000字节 |
定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节) |
varchar2(n) |
n=1 to 4000字节 |
可变长的字符串,具体定义时指明最大长度n, |
number(m,n) |
m=1 to 38 |
可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。 |
date |
无 |
从公元前4712年1月1日到公元4712年12月31日的所有合法日期, |
long |
无 |
可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。 |
raw(n) |
n=1 to 2000 |
可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。 |
long raw |
无 |
可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。 |
blob |
无 |
三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。 |
bfile |
无 |
在数据库外部保存的大型二进制对象文件,最大长度是4GB。 |
我也把这个整理了一份文档,在文章末尾的时候 可以把它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;