《02. oracle 对象管理--约束》

来源:互联网 发布:node.js 安装教程 编辑:程序博客网 时间:2024/06/05 14:42

 字段约束是为了保证数据的合法性。 oracle 中常见的字段约束有: 非空约束(NK)、唯一约束(UK)、检查约束(CK)、主键约束(PK)、外键约束(FK)。oracle 中表的约束管理大致可以分为两类,一种是非空约束管理,另一种是其它的约束管理。


一 非空约束

    oracle 常见的五种字段约束中非空约束比较特殊,特殊之处主要体现在对约束的管理上。

    1. 设置非空约束:

        1) 创建表时: 直接在字段后面添加 not null 即可,默认为可为空。

create table 表名称 (    字段    类型    [default 默认值]    [not null],    字段    类型    [default 默认值]    [not null],    ...    constraint ...  //约束    ...);

        2)创建表后: alter table 表名称  字段名 字段类型 not null ;//使用修改表字段类型方式。

              示例:  alter table T_USER modify ID number not null;

             

    2. 删除约束: alter table 表名称  字段名 字段类型;  //使用修改表字段类型方式。

         示例:  alter table T_USER modify ID number null;

        

    3. 测试: 当存在非空约束时,尝试插入空数据: insert into T_USER(NAME,AGE) values('zhangsan',18);

        

二 其它约束

    对于唯一约束,主键约束,外键约束,检查约束创建和删除的语法基本类型。 在创建表的同时设置时,使用 constraint , 在创建表之后设置时 使用 alter table 表名称  add/modify/drop  constraint xxxx; 推荐使用第二种方式,表定义只定义字段类型,默认值,非空约束,其它约束使用alter 语句进行设置。(pl sql 客户端工具亦是如此)

    1. 唯一约束(UK):

        1.名称: 推荐使用 UK_表名_字段名

        2.创建:  alter table T_USER add constraint UK_USER_ID unique(NAME);

          

        3. 查询: 需要联合 user_cons_columns(用户字段表) 和 user_constraints(用户约束表) 表查询

select ucc.column_name, ucc.constraint_name, uc.constraint_typefrom user_cons_columns ucc, user_constraints ucwhere ucc.constraint_name = uc.constraint_name and ucc.table_name = 'T_USER';

         

        4.删除:  alter table T_USER drop constraint UK_USER_ID;

         

        5.测试: 测试插入名称一样的数据:

          

    2. 检查约束(CK):

        1.名称: 推荐使用 CK_表名_字段名

        2. 创建:  alter table T_USER add constraint CK_USER_AGE check(AGE between 0 and 200);

           

        3. 删除: alter table T_USER drop constraint CK_USER_AGE;

          

        4.测试: insert into T_USER(ID,NAME,AGE) values(20,'zhangsan',500);

          

    3. 主键约束(PK)

        1.名称: 推荐使用 PK_表名_字段名

        2. 创建: alter table T_USER add constraint PK_USER_ID primary key(ID);

           

        3. 删除:  alter table T_USER drop constraint PK_USER_ID;

           

        4. 测试: 主键约束其实等价于 非空约束+唯一约束

           

    4. 外键约束(FK)

        1.名称: 推荐使用 FK_表名_字段名

        2. 创建:  alter table 子表名 add constraint 外键名 foreign key(字表字段) references 主表(主表字段)[on delete cascade]; //删除的时候,级联删除

                       alter table 子表名 add constraint 外键名 foreign key(字表字段) references 主表(主表字段) [on delete set null];//删除的时候设置为null

-- 清空目前存在的表和相关约束:先删除约束再删除表alter table T_ADDRESS drop constraint FK_ADDRESS_USER_ID;alter table T_USER drop constraint PK_USER_ID;drop table T_USER;drop table T_ADDRESS;create table T_USER(IDnumber,NAMEvarchar2(50),AGEnumber(3));create table T_ADDRESS(IDnumber,NAMEvarchar2(100),USER_IDnumber);-- 主表必须有主键alter table T_USER add constraint PK_USER_ID primary key(ID);-- 设置外键alter table T_ADDRESS add constraint FK_ADDRESS_USER_ID foreign key(USER_ID) references T_USER(ID);

        3. 删除: alter table T_ADDRESS drop constraint FK_ADDRESS_USER_ID;

          

        4. 测试: 测试插入数据, 需注意当外键为null 的时候能插入。

          

          外键字段值为null 的时候,能插入成功。如果想为null 不能插入成功,则需添加 非空约束。

         


          表与表直接设置外键关系能更高的保证数据一致性,与此同时,在修改表数据和表结构时也增加了一定的麻烦。 在删除主表数据的时候,字表数据可以级联删除,也可以字表数据外键字段设置为null, 如果设置为null, 就变成了脏数据。 在删除主表的时候,如果存在外键管理此字表,则不能删除,需先删除字表,或者删除外键之后,才能进行删除,或者使用强制删除的方式:  drop table member cascade constraint purge; 忽略主外键约束,强制删除



1 0
原创粉丝点击