日期:2014-05-16 浏览次数:20487 次
--约束 --****************************************************************************************** --非空约束:(not null) * 确保字段值不允许为空 * 与其他约束相比是唯一只能在字段级定义 --在列级定义 create table EMPLOYEESNOTNULL ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20) not null,--在列级定义 LAST_NAME VARCHAR2(25) ) --在表的外部定义约束 create table EMPLOYEESNOTNULL_01 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25) ) alter table EMPLOYEESNOTNULL_01 modify FIRST_NAME not null --****************************************************************************************** --唯一性约束(UNIQUE) * 唯一性约束条件确保所在的字段或者字段组合不出现重复值 * 唯一性约束条件的字段允许出现(1或多个)空值 * Oracle将为唯一性约束条件创建对应的唯一性索引 注:如果字段有值,要唯一,但空值可以出现多个 --方法一 在列级定义 create table emp_un_01 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20) unique, --列级定义 LAST_NAME VARCHAR2(25) ) --方法二 在表级定义约束 --在表级定义约束额语法格式 constraint 约束的名称 约束的类型(字段1,字段2) * 约束的名称 自定义 * 约束的类型(unique,primary key) * (字段1,字段2) 如果有多个字段,中间用,隔开 create table emp_un_02 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), constraint un_emp_un_02 unique(first_name) --在表级定义约束 ) --方法三 在表的外部定义约束 --语法结构: alter table table_name add constraint 约束的名称 约束的类型(字段1,字段2) * 约束的名称 自定义 * 约束的类型(unique,primary key) * (字段1,字段2) 如果有多个字段,中间用,隔开 create table emp_un_03 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25) ) alter table emp_un_03 add constraint un_emp_un_03 unique(first_name) --方法四(在表级定义联合唯一) create table emp_un_04 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), constraint un_emp_un_04 unique(first_name,LAST_NAME) --在表级定义约束 ) --方法五(在表的外部定义) create table emp_un_05 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25) ) alter table emp_un_05 add constraint un_emp_un_05 unique(first_name,LAST_NAME) --****************************************************************************************** --主键约束( PRIMARY KEY) * 主键从功能上看相当于非空且唯一 * 一个表中只允许一个主键 * 主键是表中能够唯一确定一个行数据的字段 * 主键字段可以是单字段或者是多字段的组合 * Oracle为主键创建对应的唯一性索引 --方法一 在列级定义 create table emp_pk_01 ( EMPLOYEE_ID NUMBER(6) primary key, FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25) ) --方法二 在表级定义 create table emp_pk_02 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), constraint pk_emp_pk_02 primary key(EMPLOYEE_ID) ) --方法三 在外部定义 create table emp_pk_03 ( EMPLOYEE_ID NUMBER(6), FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25) ) alter table emp_pk_03 add constraint pk_emp_pk_03 primary key(EMPLOYEE_ID) --方法四(联合主键) 在表级定义 --账号表 create table account_01 ( accounid varchar2(18) primary key, --账号 balance number(10,2) --余额 ) --存款信息表 create table inaccount_01 ( accounid varchar2(18), --账号 inbalance number(10,2), --存入金额 indate timestamp, --存款时间 constraint pk_inaccount_01 primary key(accounid,indate) ) insert into inaccount_01(accounid,inbalance,indate) values('1111',12,sysdate); insert into inaccount(accounid,inbalance,indate) values('1111',10,sysdate); --方法五 ,在外部定义 create table account_02 ( accounid varchar2(18) primary key, --账号 balance number(10,2) --余额 ) --存款信息表 create table inaccount_02 ( accounid varchar2(18), --账号 inbalance number(10,2), --存入金额 indate timestamp --存款时间 ) alter table inaccount_02 add constraint pk_inaccount_02 primary key(accounid,indate) --****************************************************************************************** --外键约束( FOREIGN KEY) * 外键是构建于一个表的两个字段或者两个表的两个字段之间的关系 * 外键确保了相关的两个字段的关系: * 子表外键列的值必须在主表参照列值的范围内,或者为空 * 主表主键值被子