(就是说如果一个约束约束的是两个列或者是两个以上的话,就要将该约束创建为表级别的约束)
方法一:
Create table 表名(字段1 字段1类型 Primary Key,字段2 字段2类型,..字段N 字段N类型);
Create table UserInfo(UserID varchar2(20) Primary Key,UserPassWord varchar(20),StateID number);
方法二:
Alter table 表名 add constraint 约束名 Primary Key(字段1);
Create table UserInfo(UserID varchar2(20),UserPassWord varchar(20),StateID number);   
Alter table UserInfo add constraint PK_UserInfo Primary Key(UserID); 外键约束的添加-------->>>> 
方法一:
Create table 表名(字段1 字段1类型,字段2 字段2类型 constraint 约束名 references 外键表名(外键),..字段N 字段N类型); 
Create table UserInfo(UserID varchar2(20),UserPassWord varchar(20),StateID number constraint FK_UserInfoState references State(StateID)); 
(注:在此之前我们必须先创建好State表)-Create table State (StateID number primary key,StateName varchar2(20));
方法二:
Alter table 外键表 add constraint 约束名 Foreign Key(外键表中的外键) references 主键表名(主键表中的主键);
Create table UserInfo(UserID varchar2(20) Primary Key,UserPassWord varchar2(20),StateID number); 
Create table State (StateID number primary key,StateName varchar2(20)); 
Alter table UserInfo add constraint FK_UserInfoState Foreign Key(StateID) references State(StateID);
非空约束的添加非空约束的添加非空约束的添加非空约束的添加-------->>>>
方法一:Create table 表名(字段1 字段1类型,字段2 字段2类型 constraint 约束名 not null,..字段N 字段N类型);
Create table UserInfo(UserID varchar2(20),UserPassWord varchar2(20) constraint N_UserPassWord not null,StateID number);
方法二:Alter table 表名 modify (字段名 not null); 
Create table UserInfo(UserID varchar2(20),UserPassWord varchar2(20),StateID number);   
Alter table UserInfo modify(UserPassWord not null); 
唯一约束的添加唯一约束的添加唯一约束的添加唯一约束的添加-------->>>>   
方法一:
Create table 表名(字段1 字段类型1,字段2 字段类型2 constraint 约束名 Unique,字段n 字段类型n); 
Create table dog(dogid number,dogName varchar2(20) constraint Un_dogName Unique); 
方法二:Alter table 表名 add constraint 约束名 Unique(被约束字段);
Create table dog(dogid number,dogName varchar2(20));   
Alter table dog add constraid Un_dogName Unique(dogName); 
检查约束的添加检查约束的添加检查约束的添加检查约束的添加-------->>>>
方法一:Create table 表名(列名1 列名1类型 constraint 约束名 Check(表达式),列名2 列名2类型,列名N 列名N类型);
Create table pig(pigID number constraint CK_pigID Check(PigID >=0),pigName varchar2(20)); 
方法二:Alter table 表名 add co
nstraint 约束名 Check(表达式); 
Create table pig(pigId number,pigName varchar2(20)); 
Alter table pig add constraint CK_pigID Check(pigID >= 0);   
<;约束删除语句:Alter table 表名 drop constraint 约束名> 
Alter table pig drop constraint CK_pigID;
-----------------------------------------------------------------------------------------------------------------
约束的追加:
以下几种约束 、并 一一列举:
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 de
pt (id)
-
---------------------------------------------------------------------------------------------------------
执行以下sql生成的语句即可
1
删除所有外键约束
select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R'
2
禁用所有外键约束
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
3
启用所有外键约束
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
表的建立
Oracle中包括五种约束,包括主键约束(primary key,该属性的值不能为空,不可重复,默认该列自动建立索引),外键约束(foreign key() references rname,参照完整性约束,该属性的值必须在所对应的关系中存在),非空约束(not null),唯一约束(unique,不可重复,但可以为空,因为在数据库中,该表达式 null=null 的返回结果为unknown),check约束(check(a in(a1,a2,a3))),如下例
create table r1
( id numeric(15) primary key, //主键约束
name varchar2(15) not null, //非空约束
gender varchar2(2) check(gender in ('M','F','O')), //模拟枚举约束,Oracle中不支持枚举类型
stu_number unique, //禁止重复,但可以为空
foreign key(stu_number) references r0); //外键约束
表的修改
1.增加一个新的属性
alter table r add id varchar2(10);
2.减少一个已经存在的属性
alter table r drop column name;    (不行的话,就在 drop 关键字的后面添加上一个column 的关键字)
3.修改一个已经存在的属性的限制
alter table test1 modify grade number(5,2) not null;
4.修改一个已经存在的属性的属性名称
alter table test1 rename column id to stu_number;  -- 要注意的是你不要使用 oracle 的 关键字就可以了。否则或包标示符无效。
sql约束条件大于0完整性约束
  完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束:
    Check
    NOT NULL
    Unique
    Primary
    Foreign key
  完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,
吧 当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。
  禁用约束,使用ALTER语句
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;
  或
ALTER TABLE policies DISABLE CONSTRAINT chk_gender
  如果要重新启用约束:
ALTER TABLE policies ENABLE CONSTRAINT chk_gender
  删除约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name
  或
ALTER TABLE policies DROP CONSTRAINT chk_gender;
  Check 约束
  在数据列上Check 约束需要 一个特殊的布尔条件或者将数据列设置成TRUE,至少一个数据列的值是NULL,Check约束用于增强表中数据内容的简单的商业规则。
用户使用Check约束保证数据规则的一致性。Check约束可以涉及该行同属Check约束的其他数据列但不能涉及其他行或其他表,或调用函数SYSDATE,UID,USER,USERENV。
如果用户的商业规则需要这类的数据检查,那么可以使用触发器。Check约束不保护LOB数据类型的数
据列和对象、嵌套表、VARRY、ref等。
单一数据列可以有多个Check约束保护,一个Check约束可以保护多个数据列。
  创建表的Check约束使用CREATE TABLE语句,更改表的约束使用ALTER TABLE语句。
  语法:
CONSTRAINT [constraint_name] CHECK (condition);
  Check约束可以被创建或增加为一个表约束,当Check约束保护多个数据列时,必须使用表约束语法。约束名是可选的并且如果这个名字不存在,
那么oracle将产生一个以SYS_开始的唯一的名字。
  例:
CREATE TABLE policies
(policy_id NUMBER,
holder_name VARCHAR2(40),
gender VARCHAR2(1) constraint chk_gender CHECK (gender in ('M','F'),
marital_status VARCHAR2(1),
date_of_birth DATE,
constraint chk_marital CHECK (marital_status in('S','M','D','W'))
);
NOT NULL约束
  NOT NULL约束应用在单一的数据列上,并且他保护的数据列必须要有数据值。缺省状况下,ORACLE允许任何列都可以有NULL值。某些商业规则要求某数据列必须要有值,
NOT NULL约束将确保该列的所有数据行都有值。
  例:
CREATE TABLE policies
(policy_id NUMBER,
holder_name VARCHAR2(40) NOT NULL,
gender VARCHAR2(1),
marital_status VARCHAR2(1),
date_of_birth DATE NOT NULL
);
对于NOT NULL的ALTER TABLE语句与其他约束稍微有点不同。
ALTER TABLE policies MODIFY holder_name NOT NULL
唯一性约束(Unique constraint)
  唯一性约束可以保护表中多个数据列,保证在保护的数据列中任何两行的数据都不相同。唯一性约束与表一起创建,在唯一性约束创建后,
可以使用ALTER TABLE语句修改。
  语法:
column_name data_type CONSTRAINT constraint_name UNIQUE
  如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下:
(就是说如果一个约束约束的是两个列或者是两个以上的话,就要将该约束创建为表级别的约束)
CONSTRAINT constraint_name (column) UNIQUE USING INDEX TABLESPACE (tablespace_name) STORAGE (stored clause)
唯一性约束由一个B-tree索引增强,所以可以在USING子串中为索引使用特殊特征,比如表空间或存储参数。
CREATE TABLE语句在创建唯一性约束的同时也给
目标数据列建立了一个唯一的索引。
CREATE TABLE insured_autos
(policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY,
vin VARCHAR2(10),
coverage_begin DATE,
coverage_term NUMBER,
CONSTRAIN unique_auto UNIQUE (policy_id,vin) USING INDEX TABLESPACE index STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0)
);
用户可以禁用未以性约束,但他仍然存在,禁用唯一性约束使用ALTER TABLE 语句
ALTER TABLE insured_autos DISABLE CONSTRAIN unique_name;
删除唯一性约束,使用DROP CONSTRAIN语句
ALTER TABLE insured_autos DROP CONSTRAIN unique_name;
  注意用户不能删除在有外部键指向的表的唯一性约束。这种情况下用户必须首先禁用或删除外部键(foreign key)。
  删除或禁用唯一性约束通常同时删除相关联的唯一索引,因而降低了数据库性能。经常删除或禁用唯
一性约束有可能导致丢失索引带来的性能错误。
要避免这样错误,可以采取下面的步骤:
  1、在唯一性约束保护的数据列上创建非唯一性索引。
  2、添加唯一性约束
  主键(Primary Key)约束
  表有唯一的主键约束。表的主键可以保护一个或多个列,主键约束可与NOT NULL约束共同作用于每一数据列。
NOT NULL约束和唯一性约束的组合将保证主键唯一地标识每一行。像唯一性约束一样,主键由B-tree索引增强。
创建主键约束使用CREATE TABLE语句与表一起创建,如果表已经创建了,可以使用ALTER TABLE语句。
CREATE TABLE policies
(policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY,
holder_name VARCHAR2(40),
gender VARCHAR2(1),
marital_status VARCHAR2(1),
date_of_birth DATE
);
与唯一性约束一样,如果主键约束保护多个数据列,那么必须作为一个表约束创建。
CREATE TABLE insured_autos
(policy_id NUMBER,
vin VARCHAR2(40),
coverage_begin DATE,
coverage_term NUMBER,
CONSTRAINT pk_insured_autos PRIMARY KEY (policy_id,vin)
USING INDEX TABLESPACE index
STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0)
);
禁用或删除主键必须与ALTER TABLE 语句一起使用  (一般来说一张表中只有一个主键(但是可能有多列组成))
ALTER TABLE policies DROP PRIMARY KEY;
  或
ALTER TABLE policies DISABLE PRIMARY KEY;
 在此,我将Oracle中的约束总结为6种,即:
  lNOT NULL约束
  DEFAULT约束 (DEFAULT在Oracle中好象没有被作为约束处理,因为创建后从USER_CONSTRAINTS中查不到,有谁知道怎么查,还望不吝赐教)
  lPRIMARY KEY约束
  llCHECK约束
  lUNIQUE约束
  lFOREIGN KEY约束
  l1: NOT NULL约束和DEFAULT约束只能被创建为列级约束
  l2: 其他4种则既可以被创建为列级约束,也可以被创建为表级约束
  l3: