Oracle:5、表

目录

一、表结构,5种数据类型:

1.1数值类型:整数或浮点数。

1.2字符类型:

1.3日期类型:

1.4LOB类型:

1.5ROW ID类型:

二、创建表

2.1storage子句用于设置存储参数:

2.2数据块管理参数:

2.3指定重做日志:

2.4指定缓存:

三、修改表

3.1增加字段

3.2删除字段

3.3更新字段

3.4修改表名

3.5修改存储的表空间

3.6修改表的存储参数

3.7删除表

3.8修改表状态

四、表约束

4.1、非空约束

4.2、主键约束

4.3、唯一性约束

4.4、外键约束

4.5、禁止和激活约束

4.6、删除约束


 

一、表结构(5种内置字段数据类型):

表中存在5种内置字段数据类型:数值类型、字符类型、日期类型、LOB类型与ROW ID类型。除此还可以自定义类型。

1.1数值类型:整数或浮点数。

number为例:存在可选参数精度precision和范围scale。如:number(9,1),共9位,小数保留一位。若小数位过多则四舍五入。

1.2字符类型:

  • char:定长、范围1-2000字节。长度固定,存储内容少于长度则用空格补充。
  • varchar2:变长。不会用空格填充。另:对于varchar2 以2000为分界线,<2000则在存储上直接分配足够的空间,而>=2000的,不会预分配足够的空间。这是oracle出于效率方面的考虑。

1.3日期类型:

  • sysdate函数获取系统当前日期。
  • nls_date_format指定日期初始化格式。

1.4LOB类型:

  • BLOB,存储二进制对象。图像、音频、视频。最大存储128TB二进制对象。
  • CLOB,存储字符格式的大型对象。最大存储128MB字符对象。
  • BFILE,将128MB的二进制文件作为操作做系统文件存储在数据库外部,BFILE类型的字段中仅报错二进制文件的指针,并且BFILE字段是只读的,不能通过数据库对其中的数据进行修改。

LOB列补充

  1. LOB列根据内容大小不同,采用不同的存储方式,数据小于4KB则内容存储这该LOB列中,如果大于4KB则存储在表的外部。
  2. 大对象表定义完成后,应该使用初始化函数初始化大对象列。如BLOB,CLOB使用empty_clob()函数和empty_blob()函数进行初始化(建完表后插入一条数据,大字段使用函数返回值)。

1.5ROW ID类型:

伪列类型(oracle自动为每个表建立ROWID的字段),用于这oracle内存保存表中每条记录的物理地址。

二、创建表

创建表需要create table系统权限,如果要这其他模式中创建表,需要有create any table系统权限。

create table [模式.]table_name(
column_name column_type [not null |default xxx],
...
)[tablespace tablespace_name
storage(initial|next|minextents size )]
[pctfree percent]
[pctused percent]
[initrans numbers]
[logging|nologging]
[nocache|cache]

2.1storage子句用于设置存储参数:

  • initial:指定第一个盘区大小以KB或者MB为单位,如storage(initial 128kb);(这为已知数量的数据建立表时,可设置其能够容纳所有数据的数值,这样所有数据都这一个盘区中,从而避免产生碎片)
  • next:指定下一个(第二个)盘区大小。(该参数仅这字典管理的表空间中起作用,而这本地化管理的表空间中不再起作用)
  • minextents:指定允许为表中数据所分配的最小盘区数目。(同样,本地化管理的表空间中部再起作用)

2.2数据块管理参数:

  • pctfree:指定数据块中必须保留的最小空间百分比。 默认10
  • pctused:设置数据块是否可用的界限。如果已占用的存储空间低于pctused设置的比例,则数据块能够被再次使用。
  • initrans:指定数据块所允许的并发事务数目(在数据库头部开辟initrans个事务空间,仅用于存储事务条目。)11G中默认最大支持255个并发事务。超过initrans个事务时,oracle将这数据库空闲空间中为事务分配空间,动态的进行开辟和回收。

2.3指定重做日志:

[logging|nologging] 默认logging即记录数据的改变。

重做日志记录数据的所有改变,当发生故障导致数据不能从内存报错到数据文件中,就可以从重做日志中获取被操作的数据,防止数据丢失,提高表中数据的可靠性。

不指定重做日志,可节省重做日志文件的存储空间,但没有重做日志文件记录对标的操作,可能会无法用数据库恢复操作来回复丢失的数据。

2.4指定缓存:

[nocache|cache] 默认nocache。

当oracle中执行全表搜索时,读入缓存的数据块存储这LRU列的最近最少使用端,这意味着再进行查询操作,且必须向缓存中存储数据时,就会将刚读入的数据块换出。

建表时使用cache子句改变这种行为。使得执行的全表搜索放置这LRU的最近最常用的一端。一般对于比较小且又经常查询的表,可以这创建时指定cache子句。

三、修改表

修改表需要有alter table系统权限,修改任何模式中的表则需要alter any table系统权限。

3.1增加字段

alter table table_name add(column_name column_type);

3.2删除字段

alter table table_name drop column column_name; --单个
alter table table_name drop (column_name1,column_name2) --多个,删除多个字段不允许使用column关键字

3.3更新字段

alter table table_name modify column_name type;

3.4修改表名

alter table table_name_old rename to table_name_new; --用户只可以对自己模式中的表进行重命名。

3.5修改存储的表空间

alter table table_name move tablespace tablespace_name; 

由于表空间对应的数据文件不同,所以在物理上,数据将会从一个数据文件移动到另外的数据文件中。

select tablespace_name,table_name from user_tables where table_name = 'table_name'; 

查看表所属表空间。
 

3.6修改表的存储参数

alter table table_name pctfree xx pctused xx; --修改空闲比例和使用比例。

修改空闲比例和使用比例。 

select table_name, pct_free,pct_used from user_tables where table_name = 'table_name'; 

 查看状态

3.7删除表

drop table table_name [cascade constraints];

删除操作执行如下:

  1. 删除表中所有记录。
  2. 从数据字典中删除该表的定义。
  3. 删除与该表相关的所有索引和触发器。
  4. 回收为该表分配的存储空间。
  5. 如果有视图或PL/SQL过程依赖于该表,这些视图或PL/SQL过程将被置于不可用状态。

注1:当使用cascade constraints子句,则会删除所有相关的视图和plsql过程。
注2:一遍情况用户删除表后,并不会马上释放空间,而是将表重命名,放入回收站,当需要还原时,使用flashback table语句进行还原。如果希望删除时立即释放空间,则在语句中使用purge选项。

select object_name,original_name from recyclebin where original_name = 'table_name'; --查看已删除的表。

--查看已删除的表。

flashback table table_name to before drop; --恢复已删除的表

--恢复已删除的表

3.8修改表状态

alter table table_name {read only|read write};

四、表约束


oracle约束类型包括:非空约束、主键约束、唯一性约束、外键约束、检查约束和默认约束and so on。
 

4.1、非空约束

alter table table_name modify salary {not null | null};

4.2、主键约束

alter table table_name add constraint constraint_name primary key(column1[,column2...]); --创建主键约束,并命名

-- 创建主键约束,并命名

alter table table_name add primary key(column1[,column2...]); --创建匿名主键约束

-- 创建匿名主键约束

alter table table_name drop constraint constraint_name; --删除约束。

-- 删除约束。

主键:唯一、非空、自动建立索引。

4.3、唯一性约束

alter table table_name add constraint constraint_name unique(column1[,column2]);
alter table table_name drop constraint constraint_name;

唯一约束可以有null值。

4.4、外键约束

alter table table_name1 
add constraint constraint_name 
foreign key(column1) 
references table_name2(column2)
{on delete|update} 
{cascade|set null|no action};
alter table table_name drop constraint constraint_name; --删除外键

概念:外键表、外键列、被引用表、被引用列。要区分清楚,顾名思义。

创建外键约束要求外键列中的数据必须来自被引用列,被引用列中不存在的数据不能存储在外键列中。一般情况下,当删除被引用表中的数据时,该数据也不能出现这外键列中,如果外键列存储了将要在被引用表中删除的数据,那么对被引用表的删除数据的操作将失败(因为默认引用类型为no action)

注:在一个表上创建外键约束时,被引用表必须已经存在,并且必须为该表的被引用列定义唯一性约束或主键约束。

  • cascade:当被引用表的被引用列删除时,外键表中的对应数据也删除。
  • set null:被引用表的引用列删除时,外键表的列被设置为null(同时要求外键列支持null值)。
  • no action:默认的类型,当执行删除被引用列时,该操作被禁止。
     

4.5、禁止和激活约束

alter table table_name {disable|enable[ novalidate|validate]} constraint constraint_name;
  • disable:禁用约束,可以与关键字cascade联合使用,进行级联禁用。否则需要先禁用与之关联的外键。
  • enable:激活约束,可选项novalidate即激活时,不对现有的数据进行约束验证,默认是validate进行验证。
alter table table_name disable constraint constraint_name keep index;

-- 当禁用主键约束时,会默认删除约束的唯一索引,在重新激活时再重新建立唯一索引。通过keep index关键字保留禁用主键时的索引。
 

4.6、删除约束

alter table table_name drop constraint constraint_name;









 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值