ITPub博客

首页 > 应用开发 > IT综合 > SG_007_CHAPTER 7

SG_007_CHAPTER 7

原创 IT综合 作者:chenai79921 时间:2009-10-21 19:28:36 0 删除 编辑

Managing Tables and Constraints:

Built-in Datatypes:

ROWID:存储数据行的物理地址 数据的类型。

Creating Tables:

Name tables and column:

表名中可以包含 ‘$’ ‘_’ ‘#’

Creating a Temporary Table:

建表默认是permanent。

如果建表时候,包含关键字GLOBAL TEMPORARY,那么就建立一个临时的关系表,任何数据库的用户都能对表的定义进行查询,数据只对插入数据的用户有效。

ON COMMIT DELETE ROWS(默认的) 会话的

ON COMMIT PRESERVE ROWS 事务的

Specifying Default Values for Columns:

例子(1):

Create table table1(

Column_1 number,

Column_2 varchar2(10) default ‘TEST’)

Test为默认值。

例子(2):

Create table table1(

Column_1 number,

Column_2 TIMESTAMP WITH LOCAL TIME ZONE default systimestamp,

Column_2 varchar2(10) default user)

插入数据时候,若有default的column接收default,若没有default的column接收default时候为null。

Creating a Table from Another Table:

Create table

AS SELECT ~~~~~~~CTAS

例子:复制表的结构和数据

Create table xxx

As select * from table2

例子:

只拷贝表结构

Create table xxx as select * from table2 where 1=2

Not null的约束可以拷贝到新表,其他约束和column定义不被拷贝。

Adding Columns:

Alter table [.] add ;

当加入一个新的column,自动成为表的最右的column。

如果所加的column是已经存在的话,那么新的column的值成为null。

例子:

Alter table orders ADD(quantity NUMBER (13,3),

Update_dt DATE DEFAULT SYSDATE);

加两个column,其中一个定义默认值。

如果只加一个column的话,那么不用加括号()。

添加一个not null 的column,有如下步骤:

1.add column

2.update column for existing values

3.add a not null constraints

对一个有default column的表来说,可以add not null constraints。

Modifying Columns:

Alter table [.] MODIFY

如果忽略column的某些定义(数据类型,默认数值,column约束),忽略的部分保存不变。

例子:

Alter table orders modify (quantity NUMBER (10,3),

Status VARCHAR2(15));

Modify ,Default属性,只影响新加入表的数据,已经存在的数据null值的不受影响。

把column的default属性去除,重新用null来定义default。??359??

Dropping Columns:

Alter table[.] DROP {COLUMN | ()}

[CASCADE CONSTRAINTS]

Drop column 的时候该column的目录和约束也一起被drop。

如果该column的约束是多个column的约束,那么必须加上CASCADE CONSTRAINTS参数,此时这个多column的约束会被删除。

使某个column失效:

Alter table schme.table_name

Set unused {column } [cascade constraints]

Alter table schema.table_name DROP { UNUSED COLUMNS | COLUMNS CONTINUE }

UNUSED COLUMNS:删除所有打上unused标记的column项。

COLUMNS CONTINUE:删除出错的时,从出错处,继续删除。

Dropping Tables:

Drop操作不可逆,并且数据和表结构都被删除了。目录,约束,触发器,依靠在表上的,都被丢弃。

Drop table [schme.]table_name [cascade constraints]

cascade constraints参数:当有视图引用表的时候,当drop表的时候,要使用这个参数。

Renaming Tables:

Rename old_name TO new_name.

当你重新命名一个表,oracle 自动把老表的约束,目录,授权给新表。 所有依赖老表的视图,同义词,存储过程,function功能都失效。

不可以使用rename命令来重命名其他用户拥有的表,但是可以使用

ALTER TABLE xxx rename to yyyy

Managing Constraints:

Not null:不允许为空。

Check:检查条件是否满足。

Unique:column中没有重复值 。

Primary key:一个表中只允许有一个主键,没有重复值,没有空值。

Foreign key:父表子表通过一个共同的column来建立联系。外键引用另外一个表的主键或者unique键。

Creating Constraints:

可以在column level上在单个column上定义约束。

可以再table level 上多个column上定义约束。

如果不为约束定义一个名字,oracle会自动分配一个系统产生的以SYS开头的约束名。

Not null constraints:

定义在Column level

Constraint [not] Null

例子:

Create table orders(

Column_name datatype CONSTRAINT constraint_name NOT NULL)

Check Constraints:

Column level 或者table level

[constraint ] CHECK ()

在condition中不能使用query。

不能使用alter table modify 语句添加或者修改check constraints。只有not null可以被修改。

Unique Constraints:

一个或者多个column可以使用unique 约束。

Column-level:

[constraint ] UNIQUE

Table-level:

[constraint ] UNIQUE(,,…)

允许null。

Primary Key Constraints:

[CONSTRAINT ] PRIMARY KEY

[CONSTRAINT ] PRIMARY KEY(,,…)

为存在的表,添加一个主键。

例子:

Alter table xxx

Add constraints pk_xxx PRIMARY KEY(column1,column2)

Foreign Key Constraints:

子表中的项,引用的column是主键 key或者unique key,主表与子表的column数据类型必须匹配。

Column-level:

Constraint

REFERENCES schema.table [,,…]

[on delete {CASCADE | SET NULL}]

Table-level:

[constraint ]

Foreign key (,,…)

References schme.table [,,…]

[on delete {cascade | set null}]

外键引用的键值,可以是自己表中的column。 Null可以成为外键column

当子表引用父表的column是该父表的主键的话,那么

reference table_name (可以省略column)

on delete cascade : 删除父表记录的时候,子表中引用的记录也被删除。

on delete set null:把子表数据设置为null

否则oracle不允许删除父表,如果子表记录还存在的话。

视图中可以查看约束信息:

User_constraints , all_constraints , User_columns , User_columns

Disabled constraints:

Alter table table_name add constraint constraint_name

Foreigen key(column1,column2)

References state(column1,column2) DISABLE

Dropping Constraints:

Alter table table_name DROP CONSTRAINT constraint_name;

丢弃not null 约束,使用:

Alter table table_name MODIFY constratint_name NULL;

丢弃unique约束,同时外键约束也丢弃。

Alter table table_name DROP UNIQUE (column) CASCADE

丢弃主键约束,同时外键约束也丢弃。

Alter table table_name DROP PRIMARY KEY CASCADE

Enabling and Disabling Constraints:

Disable unique和primary约束的时候,oracle把index也丢弃了,当重新enable约束时,index rebuild。

例子:(diable constratint)

Alter table bonus DISABLE CONSTRAINT ck_bonus;

例子:(enable constraint)

Alter table state ENABLE PRIMARY KEY USING INDEX TABLESPACE user_INDEX STORAGE(INITIAL 2M NEXT 2M)

Validated Constraints:

Enable 和disable只影响将要添加或者修改到表中的数据。

相反VALIDATE 和 NOVALIDATE影响,已经存在表中的数据。

ENABLE VALIDATE : 对存在的数据进行验证。

Enable NOVALIDATE: 对存在的数据不作验证,将要输入的数据进行验证。

DISABLE VALIDATE : 约束disable了,但是约束属于valid状态。不允许DML操作,因为将来的数据不能被verify。

Disable novalidate : disble 的默认语句。

Deferring Constraint Checks:

INITIALLY IMMEDIATE: 在每个SQL语句之后,立刻check约束。(默认的)

INITIALLY DEFERRED: 在事务之后check 约束

Deferrable 的状态不能使用alter table modify constraint来修改

必须重新drop,re-create约束。

Initiall {deferrable | immediate}可以使用alter table来改变。

Set constraints 命令 用来对当前的事务执行check约束。

Alter session 命令对当前的session做check 约束。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11997930/viewspace-1028022/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SG_007_CHAPTER 6
下一篇: SG_007_CHAPTER 8
请登录后发表评论 登录
全部评论
  • 博文量
    19
  • 访问量
    14161