Oracle数据库之创建表结构
2015-06-10 13:24
423 查看
Oracle数据库之创建表结构
主键与外键主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(可以是一个属性,也可以是多个)能唯一标识一条记录,那么该属性组就是主键。
外键:关系型数据库表中的一列或者某几列的组合,它的值与另外一张表的某一列或者某几列相匹配,且为另一张表的主键(即这张表的某一列或某几列是另外一张表的主键,称这一列或几列为另外一张表的外键)。
注意:
一张表主键只能有一个,可以有多个外键以及唯一索引
Oracle数据库共有5个约束:主键、外键、非空、唯一、条件
非空:这个列的值不能为空(NOT NULL)
唯一:这个列的值在表中是唯一存在的,不能重复,但可以为空值(NULL)
条件:可以对列的值设定在某个范围内,如人的年龄就不能为负数等。
主键和唯一约束的区别:主键是列的值为表中的唯一标识,不能为空值(NULL),而唯一约束是列的值在表中唯一存在,可以为空值(NULL)。
表的创建
语法结构:
CREATE TABLE [schema.]table_name (column datatype [constraint-clause][, column datatype [constraint-clause]] … ) [TABLESPACE tablespace] [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [STORAGE storage-clause] [LOGGING|NOLOGGING] [CACHE|NOCACHE] ];
说明:
schema:表的所有者
table_name:表名
column:字段名
datatype:字段的数据类型
constraint-clause:列约束说明
tablespace:表所在的表空间
PCTFREE:为了行长度增长而在每个块中保留的空间的量(以占整个空间减去块头部后所剩余空间的百分比形式表示),当剩余空间不足pctfree时,不再向该块中增加新行。
PCTUSED:在块剩余空间不足pctfree后,块已使用空间百分比必须小于pctused后,才能向该块中增加新行。
INITRANS:在块中预先分配的事务项数,缺省值为1
MAXTRANS:限定可以分配给每个块的最大事务项数,缺省值为255
STORAGE:标识决定如何将区分配给表的存储子句
LOGGING:指定表的创建将记录到重做日志文件中。它还指定所有针对该表的后续操作都将被记录下来。这是缺省设置。
NOLOGGING:指定表的创建将不被记录到重做日志文件中。
CACHE:指定即使在执行全表扫描时,为该表检索的块也将放置在缓冲区高速缓存的LRU列表最近使用的一端。
NOCACHE:指定在执行全表扫描时,为该表检索的块将放置在缓冲区高速缓存的LRU列表最近未使用的一端。
STORAGE子句:
INITIAL:初始区的大小
NEXT:下一个区的大小
PCTINCREASE:以后每个区空间增长的百分比
MINEXTENTS:段中初始区的数量
MAXEXTENTS:最大能扩展的区数
常用建表示例:
-- 无约束 CREATE TABLE Items( ItemNO number(2), ItemName varchar2(20) );
-- 主键约束 CREATE TABLE Items( ItemNO number(2) constraint PK_Items primary key, ItemName varchar2(20) not null );
-- 外键约束 CREATE TABLE Business( BusiNo number(2) constraint PK_Business primary key, BusiName varchar2(32) not null, ItemNO number(2), StartTime date, constraint FK_Business foreign key(ItemNO) references Items(ItemNO) );
-- “唯一”和“条件”约束 CREATE TABLE Computers( CompNo number(4) constraint PK_Comp primary key, CompModel varchar2(64) unique, BuyTime date, Price number(7,2) constraint ch_price check(price>0 and price<=30000), Owner varchar2(32));
注意:
constraint:定义表中约束所必须的关键字
primary key:主键约束关键字
foreign key…references…:创建表的外键关键字
unique:为唯一约束关键字
constraint…check…:为条件约束的关键字
一个完整的示例:
CREATE TABLE Employee( id NUMBER(5) CONSTRAINT pk_employee_id PRIMARY KEY, last_name VARCHAR2(10) CONSTRAINT employee_last_name_nn NOT NULL, first_name VARCHAR2(10) NOT NULL UNIQUE, userid VARCHAR2(8) CONSTRAINT un_employee_userid UNIQUE, start_date DATE DEFAULT SYSDATE, title VARCHAR2(10), dept_id NUMBER(7) CONSTRAINT fk_employee_dept_id REFERENCES dept(id), salary NUMBER(11,2), user_type VARCHAR2(4) CONSTRAINT ck_employee_user_type CHECK (user_type IN('IN','OUT')), CONSTRAINT employee_uq_title UNIQUE (title,salary) ) TABLESPACE tsb_01 INITRANS 1 MAXTRANS 255 PCTFREE 20 PCTUSED 50 STORAGE (INITIAL 1024K NEXT 1024K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5)
删除表
DROP TABLE employee;
修改表
-- 修改表的名称 RENAME Items TO OrderItems;
-- 显示表结构 DESC OrderItems;
-- 增加列 ALTER TABLE test ADD address varchar2(40);
-- 删除列 ALTER TABLE test DROP COLUMN address;
-- 修改列的名称 ALTER TABLE test MODIFY address addresses varchar(40);
-- 修改列的属性 ALTER TABLE Emp modify score not null;
添加约束,语法如下:
ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束字段)
-- 示例 ALTER TABLE Dept ADD CONSTRAINT pk_dept primary key(id); ALTER TABLE Dept ADD CONSTRAINT fk_dept_comp foreign key(companyid) references Company;
删除约束,语法:
ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;
-- 示例 ALTER TABLE book DROP CONSTRAINT fk_book_pid;
相关文章推荐
- Oracle建立索引常用的规则
- oracle 游标循环, 查询,异常捕获,继续执行
- Oracle RMAN 将 备份集 重新 注册到控制文件 说明
- Oracle EF5升级EF6
- oracle用户创建及权限设置
- Oracle Data Integrator(ODI)简介
- Oracle命令(一):Oracle登录命令
- oracle学习系列之RMAN异地恢复数据
- oracle 循环插入
- oracle 游标循环中 捕获异常 继续执行
- 由于初始化参数文件修改错误导致oracle无法startup
- oracle学习笔记---用户管理
- oracle 两表之间字段赋值错误解析
- Oracle的一点注意点
- 关于oracle中的wmsys.wm_concat中的使用问题
- oracle新建(还原)、备份数据库
- Oracle数据库的备份方法
- 学生选课数据库(oracle 11g)的设计与管理
- oracle sequences在sql中取值
- oracle instr()