oracle 创建表及其相关约束

   在我们项目的开发过程中,数据库的开发是很常见的,本文简单介绍下非常基本的数据库操作,主要包括以下方面:

 

 

  •   创建表
  •   创建触发器
  •   创建存储过程
  •   创建索引
  • 创建视图

创建表

基本语法结构:  

 

CREATE TABLE [schema.]tablename 
( column1 datatype, 
column2,datatype ...... )
 [TABLESPACE space_name]
 [PCTFREE integer] 
[PCTUSED integer]
 [INITRANS integer]
 [MAXTRANS integer] 
[STORAGE stroage_clause]
 [LOGGING|NOLOGGING] 
[CACHE|NOCACHE] 

 

SCHEMA: 表的所有者

TABLE: 表名

column1 :属性名

datatype :属性的数据类型

TABLESPACE: 表的空间名

PCTFREE :用来为一个块保留的空间百分比,以防止在今后的更新操作中增加一列或多列值的长度

PCTUSED :一个块的使用水位的百分比,这个水位将使该块返回到可用列表中去等待更多的插入操作

INITRANS :在块中预先分配的事物项数,默认为1

MAXTRANS :在块中可以分配的最大事物项数,最大为255

LOGGING :将表的创建记录到重做日志中

NOLOGGING: 部将表的创建记录到重做日志中

STORAGE :当数据增长时,如何将区分配给表的数据增长

CACHE :在进行全表扫描时,为表建立的索引的块将放置在高速缓存的lru 列表的最近使用的一端

NOCACHE :在进行全表扫描时,为表建立的索引的块将放置在高速缓存的lru 列表的最近未使用的一端

例子:  

  

TABLE TAN.Student 
( StuentId INTEGER NOT NULL, 
Name VARCHAR2(200 CHAR) NOT NULL ENABLE, 
Age NUMBER, 
classid INTEGER NOT NULL, 
STATUS VARCHAR2(10) NULL, 
ADD_USER VARCHAR2(20) NULL,
 ADD_TS DATE DEFAULT SYSDATE, 
MOD_USER VARCHAR2(20) NULL, 
MOD_TS DATE NULL CONSTRAINT PK_STUDENT_ID PRIMARY KEY(StuentId) ) 
STORAGE( 
        INITIAL 100K
    NEXT 100K 
    MINEXTENTS 2
      MAXEXTENTS 100 PCTINCREASE 100) 

 

 说明:

      初始给Student 表分配两个Extent
  第一个Extent100K ,因INITIAL=100K
  第二个Extent100K ,因NEXT=100K
  如果因表内数据增长,需要分配第三个Extent ,因PCTINCREASE100 ,则
  第三个Extent200K=100K+100K
  第四个Extent400K=200K+200K

LOGGING :创建表的过程将被记录在重做日志中

TABLESAPCE test :该表创建在test 的空间下

INITRAN 1 :该空间块最小的事物项目数是1

MAXTRANS 255 :该空间块最多的事物项目数是255

PCTFREE 20 :当数据量大于1-20% ,此块不再插入新数据

PCTUSED 40 :当数据量要低于40% 才会接受新的数据插入

 

建立主键

在创建主键时,首先,所有的主键值都是唯一的,第二,它们必须有一个值,也就是说,作为主键的列不能 NULL

创建主键有几种方式:

1.   列约束子句:

CREATE TABLE TAN.Student ( StuentId INTEGER NOT NULL PRIMARY KEY , ...) 

 

2.   表约束子句 

CONSTRAINT PK_STUDENT_ID PRIMARY KEY (StuentId) 

    

3.   ALTER TABLE 语句  

ALTER TABLE Student ADD CONSTRAINT PK_STUDENT_ID PRIMARY KEY ( StuentId )

   

建立外键

1.   列约束子句:  

CREATE TABLE TAN.Student 
( StuentId INTEGER NOT NULL PRIMARY KEY , 
classid INTEGER NOT NULL REFERENCES Class(classid), 
...) 

 

  

2.   表约束子句   

CONSTRAINT fk_students_class 
FOREIGN KEY (classid) REFERENCES Class(classid)
 ON [DELETE CASCADE] | [DELETE CASCADE] |[SET NULL]|[NO ACTION] 

  

3.   ALTER TABLE 语句:    

ALTER TABLE Student ADD CONSTRAINT fk_students_class 
FOREIGN KEY (classid) REFERENCES Class(classid) 
ON [DELETE CASCADE] |[SET NULL]|[NO ACTION]

  

   

DELETE CASCADE: 级联删除
SET NULL:--
删除主表中的记录后,子表中的相应记录的列被设置为null( 但子表的该字段必须支持null)
NO ACTION:
不允许删除主表中被引用的数据,该操作会被禁止。

 

unique 约束

unique约束是用来保证表中的某一类,或者表中的某一类组合起来不重复的一种手段,需要注意的是引用unique约束的列并不代表一定要非空,可以为null,因为空值(null)含义是该当前列的状态不存在,永远不会和另一个空值相等,所以不违法唯一约束。

 

 

1.   列约束子句:

 

CREATE TABLE TAN.Student( ... STATUS VARCHAR2(10) unique ...)

  

 

2.   表约束子句

 

constraint name_unique unique(status)

   

3.   ALTER TABLE 语句:

alter table student add constraint status_unique unique(status) 

 

  

 

check 约束

在oracle check约束的表达式中必须至少包含表中一个或者多个列的引用,并且表达式的计算结果必须是一个布尔型的结果,该约束的级别可以定义在列或者表的级别,同时,也可以在一个列上加多个check约束。

 

1.   列约束子句:

CREATE TABLE TAN.Student( ... Age NUMBER check(Age>18)...) 

   

2.   表约束子句 

constraint age_check check(Age>18) 

   

3.   ALTER TABLE 语句:

alter table student add constraint age_check check(Age>18) 

 

default value

DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新纪录。 

 

1.   列约束子句:

CREATE TABLE TAN.Student( ... Age NUMBER defalt 18)...) 

    

2.   ALTER TABLE 语句:

 

alter table TAN modify (age number default 18)

   

 

在已有表的基础上建立新表

 

create table newtable as select studentid,name,age,status from student where name like '%jack%' 

 

 新建了newtable 表,其结构为student 表中的studentid,name,age,status ,可以说这种手段是一种表的复制,基本用于系统的数据移植,dbmigration

 

ORACLE 常用基本类型,并非所有:

字段类型

说明

VARCHAR2 (size)

可变长度的字符串, 必须规定长度

CHAR(size)

固定长度的字符串, 不规定长度默认值为1

NUMBER(p,s) 

数字型p 是位数总长度,s 是小数的长度, 可存负数最长38. 不够位时会四舍五入.

LONG

LONG 类型的列存储可变长度的字符串,最多可以存储 2GB 的数据

DATE 

日期和时间类型

TIMESTAMP

使用年、月、日、小时、分钟、秒域来对日期/ 时间提供更详细的支持

CLOB

用于存储基于字符的大对象最大可达4G

BLOB 

最多可以存储 4GB 数据的二进制大对象

BFILE 

存储指向数据库外部文件的定位符, 外部文件最大为 4GB

 

 

    

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值