村长

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、创建主键约束

文章出处:http://hi.baidu.com/heryyou/blog/item/6e8d45257aeed634c89559eb.html

创建主键约束

这部分中将会使用一个示例表:TEMP,表结构如下:

Name                           Null?    Type

ID                                      VARCHAR2(5)

NO                                      NUMBER

创建主键有几种方式:

   1 列约束子句

   2 表约束子句

   3 ALTER TABLE语句

下面讨论创建主键约束的三种格式技巧和关系。其他类型的约束,Unique,Foreign key, check,也可以使用每种方式创建

列约束子句

   下面创建一张表,有两个字段,字段id为主键,这是一个列约束子句的例子。

   CREATE TABLE temp(

       id VARCHAR2(5) PRIMARY KEY,

       no NUMBER

   );

   也可以为主键约束指定名称,

   CREATE TABLE temp(

       id VARCHAR2(5) CONSTRAINT PRIMARY KEY my_constraint_name,

       no NUMBER

   );

表约束子句

    表约束子句是在表定义结尾定义主键约束。表约束子句是CREATE TABLE语句的一部分,如果约束子句有语法错误,整个语句将失败,表不会被创建。

    下面以模板方式举例说明,Create table语句声明了一个主键,表约束子句允许包括多个约束,使用“,”分隔每一个约束定义。

    CREATE TABLE temp

       (id VARCHAR2(5),

       no NUMBER,

       CONSTRAINT PRIMARY KEY (id),

       CONSTRAINT. . next constraint,

       CONSTRAINT. . next constraint) TABLESPACE etc;

    下面创建一个TEMP表,使用表约束子句。

    CREATE TABLE temp

       (id VARCHAR2(5),

       no NUMBER,

       CONSTRAINT PRIMARY KEY (id)) TABLESPACE student_data;

ALTER TABLE 语句

    alter table语句是另外一个管理约束的选择。一旦你创建了一张表,你可以使用alter table语句管理约束、增加列、改变存储参数。

     执行功能                  ALTER 语法

     Add a constraint          ALTER TABLE table_name ADD CONSTRAINT etc

     Drop a constraint         ALTER TABLE table_name DROP CONSTRAINT etc

     Disable a constraint      ALTER TABLE table_name DISABLE CONSTRAINT etc

     Enable a constraint       ALTER TABLE table_name ENABLE CONSTRAINT etc

下面DDL包含两个DDL语句:Create table语句和Alter table语句。主键名为:PK_TEMP

CREATE TABLE temp (

     id VARCHAR2(5),

     no NUMBER

);

ALTER TABLE temp ADD CONSTRAINT pk_temp PRIMARY KEY (id);

Alter table 命令有许多选项,一个记住语法的方法是Oracle执行这个操作需要的信息:

1)、你不得不告诉Oracle你准备alter什么表:

    Alter table table_name

2)、然后,你准备做什么?Adding 一个约束

    ALTER TABLE table_name ADD CONSTRAINT

3)、强烈建议但不要求为约束定义个名字。约束名不需要放在引号里,但会以大写字母形式存储在数据字典里,

ALTER TABLE temp ADD CONSTRAINT pk_temp

4)、表示约束类型将是Primary KeyUniqueForeign Key,或Check约束

ALTER TABLE temp ADD CONSTRAINT pk_temp PRIMARY KEY

5)、跟在约束类型后面有几种特殊选项,Primary KeyUnique约束,需要指定约束的列;Check约束需要指定约束规则。

ALTER TABLE temp ADD CONSTRAINT pk_temp PRIMARY KEY (ID);

6)Primary KeyUnique约束应当指定索引的表空间名,使用USING INDEX TABLESPACE子句.

ALTER TABLE temp ADD CONSTRAINT pk_temp PRIMARY KEY (ID) USING INDEX TABLESPACE student_index;

命名约束

    主键命名一般有两种格式:

1. PK_table_name

2. table_name_PK

    创建主键不一定非要给主键定义个名字,如果不指定主键名,oracle会自动生成一个主键名,存储在数据字典中,但如果出现逐渐冲突,查询起来没有直接定义主键名方便,如果主键名定义为:PK_TEMP,就可以迅速的知道问题的所在:TEMP表上的主键出现冲突。

二、删除已存在的主键约束

文章出处:http://fengf0621.blog.sohu.com/146243070.html

--1、先刪除原本的主鍵約束pk_BATCHTX02Detail
IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[BATCHTX02DTL]') AND name = N'pk_BATCHTX02Detail')
ALTER TABLE [dbo].[BATCHTX02DTL] DROP CONSTRAINT [pk_BATCHTX02Detail]
--2、增加新的主鍵約束pk_BATCHTX02DTL
ALTER TABLE [dbo].[BATCHTX02DTL] ADD  CONSTRAINT [pk_BATCHTX02DTL] PRIMARY KEY CLUSTERED
(
 [ReceiveDate] ASC,
 [DistinctionNo] ASC,
 [SendUnitId] ASC,
 [RecvUnitId] ASC,
 [InOutDate] ASC,
 [AccountType] ASC,
 [TxNo] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]  

以下几种约束 、并 一一列举:

1.主键约束:
要对一个列加主键约束的话,这列就必须要满足的条件就是分空
因为主键约束:就是对一个列进行了约束,约束为(非空、不重复)
以下是代码  要对一个列加主键,列名为id,表名为emp

格式为:
alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)

例子:
alter table emp add constraint ppp primary key (id)

————————————————————————————————

2.check约束:
就是给一列的数据进行了限制
比方说,年龄列的数据都要大于20的
表名(emp) 列名(age)

格式:
alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)

例子:
alter table emp add constraint xxx check(age>20)

______________________________________________________________________

3.unique约束:
这样的约束就是给列的数据追加的不重复的约束类型

格式:
alter table 表名 add constraint 约束名称 约束类型(列名)
比方说可以给ename列加个unique,让ename列的数据不重复
例子:
alter table emp add constraint qwe unique(ename)

————————————————————————————————

4.默认约束:
意思很简单就是让此列的数据默认为一定的数据

格式:
alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名

比方说:emp表中的gongzi列默认为10000

alter table emp add constraint jfsd default 10000 for gongzi


————————————————————————————————

5.外键约束:
这个有点难理解了,外键其实就是引用
因为主键实现了实体的完整性,
外键实现了引用的完整性,
应用完整性规定,所引用的数据必须存在!

其实就是个引用,
比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME
id:表示产品的编号
ename:表示产品的名称

另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID
id:表示用户号
did:表示购买的产品号

要让emp表中的did列去引用dept表中的id

可以用下面的方法

格式:
alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称 (列名)

例子:
alter table emp add constraint jfkdsj foreign key (did) references dept (id)

posted on 2011-04-11 14:29  Say No  阅读(1026)  评论(0编辑  收藏  举报