Oracle数据库之创建表结构
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数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...
- oracle 数据库下所有表结构、数据量及缺失值统计
表结构 SELECT t1.TABLE_NAME, t1.COLUMN_NAME, t1.DATA_TYPE || '(' || t1.DATA_LENGTH || ')', t2.COMMENTS ...
- 如何导出远程oracle数据库中的表结构
从远程oracle数据库上导出指定表的表结构语句有两种方法: 方法一:通过sql语句获得 1,make sure that you can connect the remote database. 2 ...
- Oracle数据库不能创建表空间及表中文乱码问题
1.不能创建表空间问题 datafile为表空间的存放位置,没有将表空间存放路径指定为orcl数据库时,创建表空间出错如下 查看自己的Oracle安装位置,我的Oracle10g安装在虚拟XP系统中, ...
- oracle数据库如何创建表空间,临时表空间
目标 1.创建表空间 lxy 2.创建临时表空间tmp_lxy create tablespace lxy datafile '/u01/app/oracle/oradata/LXY/lxy.dbf' ...
- oracle数据库中创建表空间和临时表空间,以及用户和密码以及设置密码永不过期
首先进入oracle用户,命令是: su - oracle sqlplus /nolog connect system/123456@ora11g 或者 [oracle@localhost ~]$ ...
- Oracle数据库中创建表空间语句
1:创建临时表空间 create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj ...
- 使用sql developer 导出Oracle数据库中的表结构
MS SQLServer的客户端工具做的的确比较好,直接右键,导出数据库就OK了,而且MS的客户端导出的是xxx.dbf文件,直接附加到别的数据库上就OK了 Oracle的sql developer就 ...
- Oracle数据库的创建表全
CREATE TABLE "库名"."表名" ( "FEE_ID" VARCHAR2(10 BYTE) constraint ABS_FEE ...
随机推荐
- linux下删除修改时间为某天之前的文件
time_file #新建一个标识文件,修改时间为2014年4月9日0点0分 find . ! -cnewer time_file | xargs rm #删除最后修改时间在上述标识文件之前的所有文件
- 【转载51CTO】Linux中引号那些事儿
原文链接:http://os.51cto.com/art/201207/348855.htm 我们将把编写脚本的事情暂时搁在一边,然后来讨论一些,我们一直在用的,但是没有解释的东西.引号在这一节里面, ...
- Delphi应用程序的调试(十)调试器选项(在IDE中不要使用异常)
可在两个级别上设置调试选项:工程级和环境级.在前面的讲解中讲解了工程级调试选项,通过主菜单[Project | Options…]打开如下对话框: 可在Debugger Options对话框中设置全局 ...
- Spark SQL Table Join(Python)
示例 Spark SQL注册“临时表”执行“Join”(Inner Join.Left Outer Join.Right Outer Join.Full Outer Join) 代码 fr ...
- xamarin提供在线检查.net代码是否支援xamarin,ios,android
大概是多少比你想的更多的移动.我们很高兴地宣布一个新的在线服务Xamarin NET移动扫描仪-扫描您的编译.NET代码的兼容性与Xamarin.iOSXamarin.Android是,Windows ...
- SRM470 - SRM474(1-250pt,500pt)(471-500pt为最短路,474-500pt未做)
SRM 470 DIV1 250pt 题意:有n个房间排成一排,相邻两个房间之间有一扇关闭着的门(共n-1扇),每个门上都标有‘A’-‘P’的大写字母.给定一个数n,表示第n个房间.有两个人John和 ...
- objc非主流代码技巧
原文:http://blog.sunnyxx.com/2014/08/02/objc-weird-code/ [娱乐向]objc最短的方法声明 先来个娱乐向的.方法声明时有一下几个trick: 返回值 ...
- 深入理解object C中复制对象的用法(一)
第一.复制对象的基本概念 复制一个对象为副本,开辟一块新的内存来存储副本对象. 第二.如果一个对象想具备复制的功能,必须实现<NSCopying>协议和<NSMutableCopyi ...
- windows 编程—— 头文件 指引
定义 相关头文件 #define UNICODE <WINUSER.h> <WINNT.h> <WINBASE.h> #define _UNICODE ...
- 跟Google学习Android开发-起始篇-用碎片构建一个动态的用户界面(3)
4.3 构建一个灵活的用户界面 当设计你的应用程序要支持大范围的屏幕尺寸时,你可以在不同的布局配置中重用碎片,来根据可用的屏幕空间优化用户体验. 例如,在手持设备上,它可能是适应来在一个单窗格用户界面 ...