设为首页 收藏本站
查看: 694|回复: 0

[经验分享] oracle 创建表及其相关约束

[复制链接]

尚未签到

发表于 2016-7-31 14:02:30 | 显示全部楼层 |阅读模式
  
   在我们项目的开发过程中,数据库的开发是很常见的,本文简单介绍下非常基本的数据库操作,主要包括以下方面:



  
 




  • 创建表

  • 创建触发器

  • 创建存储过程

  • 创建索引

  • 创建视图

创建表

基本语法结构:  

 


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 ,
  第一个Extent 是100K ,因INITIAL=100K
  第二个Extent 是100K ,因NEXT=100K
  如果因表内数据增长,需要分配第三个Extent ,因PCTINCREASE 是100 ,则
  第三个Extent 是200K=100K+100K
  第四个Extent 是400K=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 ,可以说这种手段是一种表的复制,基本用于系统的数据移植,db 的migration 。
 

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



字段类型



说明



VARCHAR2 (size)



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



CHAR(size)



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



NUMBER(p,s) 



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



LONG



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



DATE 



日期和时间类型



TIMESTAMP



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



CLOB



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



BLOB 



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



BFILE 



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


  
 

    

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-251508-1-1.html 上篇帖子: 区分Oracle和SQL Server常用函数 下篇帖子: Oracle的rollup、cube、grouping sets函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表