美文网首页
5、oracle之约束

5、oracle之约束

作者: 如果不是废物谁又愿混吃等死 | 来源:发表于2018-08-22 23:48 被阅读0次

    约束描述:定义规则,保证数据的完整;

    分类,非空约束 、检查约束 、主键约束  、唯一约束

    创建表,设置非空约束

    CREATE TABLE table_name(column_name datatype NOT NULL,....)

    修改表时添加非空约束

    alter table table_name modify column_name datatype not null

    修改表的时候去除非空约束:

    ALTER TABLE table_name MODIFY column_name datatype NULL;

    主键约束(设置主键约束后自动变为非空)

      查看约束的名字

    desc user_constrain

     查询表的主键名字和状态

    select constrain_name,status from user_constrain  where table_name="表名"

      1.创建表的时候 数据类型+primary key

                  constraint(强制,限制,约束) constraint_name primary key(column...)

      2.(1)修改表的时候设置(添加)主键约束

                  alter table table_name add constraint  constraint_name primary key(cloumn...);

        (2)修改主键约束的名字

                  alter table table_name rename constraint old_name to     new_name

        (3)删除主键约束

                  alter table table_name disable(禁用)/enable(启用)   contraint contraint_name

                  彻底删除)alter table table_name drop constraint constriant_name     

                  (彻底删除) alter table table_name drop primary key[cascade(外键)]

    注意:主键约束的名称一般是:pk_name


    外键约束(表示主从表之间的关系)

    1、在创建表时设置外键约束(列级)

    语法:CREATE TABLE table1(column_name datatype REFERENCES table2(column_name),...); --其中table2为主表,table1为从表

    注:(1)设置外键约束时,主表字段必须为该表的主键字段

    (2)主从表中相应的字段必须是同一个数据类型

    (3)从表中外键字段的值必须来自主表中相应字段的值,或者为null值

    在创建表时设置表级外键约束

    CREATE TABLE table_name(

    column_name1 datatype,...,

    CONSTRAINT constraint_name FOERIGN KEY(column_name) REFERENCES table_name(column_name)[ON DELETE CASCADE]

    on delete cascade --> 级联删除

    修改表时添加外键约束

    alter table table_name

    add constraint constraint_name foreign key(column_name) references

    table_name(column_name) [on delete cascade]

    禁用外键约束

    语法:ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT fk_name;

    删除外键约束

    语法:ALTER TABLE table_name DROP CONSTRAINT pk_name;

    查看约束

    语法:select constrain_name,constraint_type,status from user_constraints

    where table_name='XXXX';

    status P代表主键 R代表外键

    禁用外键约束:

     alter table table_name

     disable constraint constrain_name;

    启用外键约束:

     alter table table_name

     enable constraint constrain_name;

    删除外键约束:

     alter table table_name

    drop constraint constrain_name;

    注意:外键约束的名称一般是:fk_name

    唯一约束

    唯一约束值唯一,主键约束的值也是唯一的,区别:主键约束的值不能为空,唯一约束的值可以为空;主键约束的只能有一个,唯一约束可以有多个。

    创建表时设置唯一约束(列级设置比较简单,表级设置唯一约束):

    创建表的最后加上一个语句:(创建多个唯一约束要分开写)

     constraint constraint_name unique(table_column);

     constraint constraint_name unique(table_column1);

    修改表的过程中添加唯一约束:

    alter table tabname add constraint un_id unique(typeid);

    1.列级

    create table table_name(

    clumn_name datatype unique,...

    );

    2.表级

    create table table_name(

    clumn_name datatype ,....

    constraint constraint_name unique(clumn_name)

    );

    删除表中的唯一约束:

      1.禁用:同之前的约束禁用一样

            alter table [table_name]

            disable constraint constraint_name; 

       2. 彻底删除唯一约束:

            alter  table [table_name]

            drop  constraint constraint_name;

    3.注意:唯一约束的名称一般是:u_name

    检查约束

    1、作用:让表中的值更具有实际意义。

    注:检查约束在一张表中也是可以有多个的。

    2、在创建表时设置检查约束(列级)

    语法:CREATE TABLE table_name(column_name datatype CHECK(expressions),...);

    注:expressions为条件表达式

    3、在创建表时设置检查约束(表级)

    语法:CREATE TABLE table_name(

    column_name datatype,...,

    CONSTRAINT c_name CHECK(expressions));

    表级例子

    SQL> create table userinfo_c1

    2 (id varchar2(10) primary key,

    3 username varchar2(20),

    4 salary number(5,0),

    5 constraint ck_salary check(salary>0));

    修改表时添加检查约束

    alter table userinfo_c3 add constraint ck_salary_new check(salary>0);

    删除检查约束

    ALTER TABLE table_name

    Disable(禁用) 或者enable(启用) constraint constraint_name

    ALTER TABLE table_name

    drop constraint constraint_name

    .注意:唯一约束的名称一般是:ck_name

    约束小结

    1、五个中就主键约束是要求唯一的,而且可以由多个字段组成,也就是表级约束可以多个字段写在一起;

    2、五个中只有外键约束是涉及两个表的;

    3、五个中只有非空约束是没有表级约束,只有列级约束的;

    4、在修改表的时候修改约束,也是非空约束不同,使用的是修改字段的语句:

    alter table userinfo modify username  varchar2(20)   null;

    其他的使用都是 alter table 表名

    add constraint 约束名 check/primary key/unique(字段,检查的是字段条件);  //外键:add constraint   外键名字 foreign key (从字段名)references 主表名(主表字段);

    5、非空约束没有名字,其他都是可以改名字的

    alter table  表名称  rename  constraint  用来的约束名   to  新的约束名;

    查询的时候使用数据字典:user_constraints

    select constraint_name,constraint_type,status from user_constraints 2 where table_name='USERINFO_C3';

    6、删除约束,非空约束也是使用修改字段的语句,其他的都是使用下面:

    1.禁用约束

     ALTER TABLE table_name

     DISABLE|ENABLE CONSTRAINT constraint_name;

    2.直接删除约束

    >ALTER TABLE table_name

     DROP CONSTRAINT constraint_name;

    另外主键约束因为是唯一的,有一种特殊的删除方法:

    drop primary key;

    相关文章

      网友评论

          本文标题:5、oracle之约束

          本文链接:https://www.haomeiwen.com/subject/lrvuiftx.html