• ADADADADAD

    sql中常见的5种约束是什么[ mysql数据库 ]

    mysql数据库 时间:2024-11-29 09:52:15

    作者:文/会员上传

    简介:

    sql完整性约束有:非空约束,唯一约束,主键约束,外键约束,条件约束等完整性约束是保证用户所做的修改不会破坏数据的一致性,是保护数据正确性和相容性的一种手段。常见的5种约束:NOT

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    sql完整性约束有:非空约束,唯一约束,主键约束,外键约束,条件约束等

    完整性约束是保证用户所做的修改不会破坏数据的一致性,是保护数据正确性和相容性的一种手段。

    常见的5种约束:

    NOT NULL:非空约束C,指定的列不允许为空值

    UNIQUE:唯一约束U,指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的

    PRIMARY KEY:主键约束P,唯一的标识出表的每一行,且不允许空值,一个表只能有一个主键约束

    FOREIGN KEY:外键约束R,一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列

    CHECK:条件约束C,指定该列是否满足某个条件

    非空约束 NK

    createtablemember(midnumber,namevarchar2(200)notnull);

    插入空报错:

    SQL>insertintomember(mid,name)values(1,null);*第1行出现错误:ORA-01400:无法将NULL插入("SCOTT"."MEMBER"."NAME")

    唯一约束 UK

    droptablememberpurge;createtablemember(midnumber,namevarchar2(200)notnull,emailvarchar2(50)unique);

    插入报错

    SQL>insertintomember(mid,name,email)values(1,'scott','scott@163.com');

    已创建 1 行。

    SQL>insertintomember(mid,name,email)values(2,'jack','scott@163.com');insertintomember(mid,name,email)values(2,'jack','scott@163.com')*第1行出现错误:ORA-00001:违反唯一约束条件(SCOTT.SYS_C0010891)

    给约束指定名字

    这错误并没有像之前的非空约束那样,准确告诉用户哪个字段出现了问题,我们可以给这个约束指定一个名字

    createtablemember(midnumber,namevarchar2(200)notnull,emailvarchar2(50),constraintuk_emailunique(email));

    主键约束 PK

    主键约束=非空约束+唯一约束

    createtablemember(midnumber,namevarchar2(200)notnull,emailvarchar2(50),constraintpk_numberprimarykey(mid),constraintuk_emailunique(email));

    插入错误的数据报错:

    SQL>insertintomember(mid,name,email)values(1,'jack','scott@163.com');

    已创建 1 行

    SQL>insertintomember(mid,name,email)values(1,'jack','jack@163.com');insertintomember(mid,name,email)values(1,'jack','jack@163.com')*第1行出现错误:ORA-00001:违反唯一约束条件(SCOTT.PK_NUMBER)

    检查约束 CK

    createtablemember(midnumber,namevarchar2(200)notnull,agenumbercheck(agebetween0and200),sexvarchar2(10),emailvarchar2(50),constraintpk_numberprimarykey(mid),constraintuk_emailunique(email),constraintck_sexcheck(sexin('男','女')));

    插入错误数据报错:

    SQL>insertintomember(mid,name,age,sex,email)values(1,'Jack','300','无','jack@163.com');insertintomember(mid,name,age,sex,email)values(1,'Jack','300','无','jack@163.com')*第1行出现错误:ORA-02290:违反检查约束条件(SCOTT.CK_SEX)

    主外键约束 FK

    createtablemember(midnumber,namevarchar2(200)notnull,constraintpk_midprimarykey(mid));createtableadvice(adidnumber,contentclobnotnull,midnumber,constraintpk_adidprimarykey(adid),constraintfk_midforeignkey(mid)referencesmember(mid));

    正确插入数据,mid在附表中已经存在

    insertintomember(mid,name)values(1,'Scott');insertintomember(mid,name)values(2,'Jack');insertintoadvice(adid,content,mid)values(1,'test',1);insertintoadvice(adid,content,mid)values(2,'test',2);commit;

    插入一条父表中没有的mid数据

    SQL>insertintoadvice(adid,content,mid)values(3,'test',3);insertintoadvice(adid,content,mid)values(3,'test',3)*第1行出现错误:ORA-02291:违反完整约束条件(SCOTT.FK_MID)-未找到父项关键字

    采用主外键约束会在表的删除和数据删除方面存在新的问题

    删除父表得先删除子表

    SQL>droptablemember;droptablemember*第1行出现错误:ORA-02449:表中的唯一/主键被外键引用

    强制性删除父表,这样就不能使用purge选项了,并且字表中的主外键约束也将不复存在

    SQL>droptablemembercascadeconstraint;表已删除。SQL>insertintoadvice(adid,content,mid)values(3,'test',3);

    已创建 1 行

    删除父表的数据的先删除字表中的数据

    SQL>deletefrommemberwheremid=1;deletefrommemberwheremid=1*第1行出现错误:ORA-02292:违反完整约束条件(SCOTT.FK_MID)-已找到子记录

    除了这种方法外还可以设置级联操作子句

    on delete cascade

    createtableadvice(adidnumber,contentclobnotnull,midnumber,constraintpk_adidprimarykey(adid),constraintfk_midforeignkey(mid)referencesmember(mid)ondeletecascade);

    这样的话,删除附表数据,会把字表中的数据也给删除。

    on delete set null

    createtableadvice(adidnumber,contentclobnotnull,midnumber,constraintpk_adidprimarykey(adid),constraintfk_midforeignkey(mid)referencesmember(mid)ondeletesetnull);

    这样删除父表中的数据,子表中的对应的关联字段将被设置为空

    SQL>deletefrommemberwheremid=1;已删除1行。SQL>select*fromadvice;ADIDCONTENTMID------------------------------   test    test2

    查看约束

    SQL>selectconstraint_name,constraint_type,table_namefromuser_constraints;CONSTRAINT_NAMEC  TABLE_NAME-------------------------------------------------------------FK_DEPTNOR    EMPPK_EMPP    EMPPK_DEPTP    DEPT

    R外键约束,C检查约束,Q唯一约束,P主键约束

    修改约束

    增加约束

    altertablememberaddconstraintpk_midprimarykey(mid);altertablememberaddconstraintck_agecheck(agebetween0and200);altertablemembermodify(namevarchar2(50)notnull);

    需要注意的是非空约束使用的是modify的方式

    禁用/启用约束

    非外键

    altertablememberdisableconstraintck_age;altertablememberenableconstraintck_age;

    外键

    altertablememberdisableconstraintpk_midcascade;

    删除约束

    altertablememberdropconstraintpk_midcascade;altertablememberdropconstraintck_age;
    sql中常见的5种约束是什么.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: sqlsql约束中常