首页 > 应用开发 > IT综合 > SG_007_CHAPTER 7
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 例子:复制表的结构和数据 Create table xxx As select * from table2 例子: 只拷贝表结构 Create table xxx as select *
from table2 where 1=2 Not null的约束可以拷贝到新表,其他约束和column定义不被拷贝。 Adding
Columns: Alter table
[ 当加入一个新的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
[ 如果忽略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[ [CASCADE CONSTRAINTS] Drop column 的时候该column的目录和约束也一起被drop。 如果该column的约束是多个column的约束,那么必须加上CASCADE CONSTRAINTS参数,此时这个多column的约束会被删除。 使某个column失效: Alter table schme.table_name Set unused {column
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 例子: Create table orders( Column_name datatype CONSTRAINT constraint_name NOT NULL) Check
Constraints: Column level 或者table level [constraint 在condition中不能使用query。 不能使用alter
table modify 语句添加或者修改check constraints。只有not null可以被修改。 Unique
Constraints: 一个或者多个column可以使用unique 约束。 Column-level: [constraint
Table-level: [constraint
允许null。 Primary
Key Constraints: [CONSTRAINT [CONSTRAINT 为存在的表,添加一个主键。 例子: 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 约束。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11997930/viewspace-1028022/
,如需转载,请注明出处,否则将追究法律责任。
AS SELECT