>  기사  >  데이터 베이스  >  SQL 무결성 제약 조건은 무엇입니까?

SQL 무결성 제약 조건은 무엇입니까?

清浅
清浅원래의
2019-05-09 09:50:1917216검색

SQL 무결성 제약 조건에는 다음이 포함됩니다. 1. "NOT NULL" null이 아닌 제약 조건, 지정된 열은 null 값을 허용하지 않습니다. 2. "UNIQUE" 고유 제약 조건, 지정된 열에 중복 값이 ​​없습니다. PRIMARY KEY" 기본 키 제약 조건은 테이블의 각 행을 고유하게 식별합니다. 4. "FOREIGN KEY" 외래 키 제약 조건 5. "CHECK" 조건 제약 조건.

SQL 무결성 제약 조건은 무엇입니까?

무결성 제약 조건은 사용자가 수정한 내용이 데이터의 일관성을 파괴하지 않도록 하고 데이터의 정확성과 호환성을 보호하기 위한 수단입니다.

5가지 공통 제약 조건:

NULL: null이 아닌 제약 조건 C, 지정된 열은 null 값을 허용하지 않습니다.

UNIQUE: 고유 제약 조건 U, 지정된 열에 중복 값이 ​​없습니다. 또는 모든 테이블의 값 값 또는 각 값 세트는 고유합니다

PRIMARY KEY: 기본 키 제약 조건 P는 테이블의 각 행을 고유하게 식별하며 null 값은 허용되지 않습니다. 테이블은 하나의 기본만 가질 수 있습니다. key 제약 조건

FOREIGN KEY: 외래 키 제약 조건 R, 한 테이블의 열이 다른 테이블의 열을 참조하여 자신을 참조하는 열을 가리킬 수 있는 종속 관계를 유발합니다.

CHECK: 조건부 제약 조건 C, 여부를 지정합니다. 열이 특정 조건을 만족합니다.

null이 아닌 제약 조건 NK

create table member(
    mid number,    
    name varchar2(200) not null
    );

삽입 오류:

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

Unique 제약 조건 UK

drop table member purge;create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50) unique
    );

삽입 오류

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

1개의 행이 생성되었습니다.

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

제약조건의 이름을 지정하세요

이 오류는 이전의 null이 아닌 제약조건과 같은 문제가 있는 필드를 사용자에게 정확하게 알려주지 않습니다. 이 제약조건의 이름을 지정할 수 있습니다.

create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50),    
    constraint uk_email unique(email)
    );

기본 키 제약조건 PK

기본 키 제약 조건 = null이 아닌 제약 조건 + 고유 제약 조건

create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50),    
    constraint pk_number primary key(mid),    
    constraint uk_email unique(email)
    );

잘못된 데이터 삽입 및 오류 보고:

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

1 행 생성됨

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

제약 확인 중 CK

create table member(
   mid number,    
   name varchar2(200) not null,    
   age number check(age between 0 and 200),    
   sex varchar2(10),    
   email varchar2(50),    
   constraint pk_number primary key(mid),    
   constraint uk_email unique(email),    
   constraint ck_sex check(sex in('男','女'))    
   );

잘못된 데이터 삽입 및 오류 보고:

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

기본 외래 키 제약 조건 FK

create table member(
    mid number,
    name varchar2(200) not null,    
    constraint pk_mid primary key(mid)
    );    
create table advice(
       adid number,
       content clob not null,
       mid number,       
       constraint pk_adid primary key(adid),       
       constraint fk_mid foreign key(mid) references member(mid)
       );

데이터를 올바르게 삽입하세요. mid는 첨부된 테이블에 이미 존재합니다.

insert into member(mid,name) values (1,'Scott');
insert into member(mid,name) values (2,'Jack');
insert into advice(adid,content,mid) values (1,'test',1);
insert into advice(adid,content,mid) values (2,'test',2);
commit;

부모 테이블에 없는 mid 데이터를 삽입하세요.

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

기본 및 외래 키 제약 조건을 사용하면 새로운 키가 발생합니다. 테이블 삭제 및 데이터 삭제 문제

상위 테이블을 삭제하려면 하위 테이블을 먼저 삭제해야 합니다

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

상위 테이블 삭제가 필수이므로 purge 옵션을 사용할 수 없으며 기본 및 외래 키 제약 조건이 있습니다. word table은 더 이상 존재하지 않습니다

SQL> drop table member cascade constraint;
表已删除。
SQL> insert into advice(adid,content,mid) values (3,'test',3);

1개의 행이 생성되었습니다

상위 테이블의 데이터를 삭제하려면 먼저 word table의 데이터를 삭제하세요

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

이 방법 외에도 캐스케이드 작업을 설정할 수도 있습니다 절

on delete cascade

create table advice(
       adid number,
       content clob not null,
       mid number,       
       constraint pk_adid primary key(adid),       
       constraint fk_mid foreign key(mid) references member(mid) on delete cascade
       );

이 경우 추가된 테이블 데이터를 삭제하면 테이블이라는 단어도 삭제됩니다.

on delete set null

create table advice(       
adid number,       
content clob not null,       
mid number,       
constraint pk_adid primary key(adid),       
constraint fk_mid foreign key(mid) references member(mid) on delete set null      
 );

이런 식으로 상위 테이블의 데이터를 삭제하면 하위 테이블의 해당 관련 필드가 null

SQL> delete from member where mid=1;

已删除 1 行。

SQL> select * from advice;

      ADID CONTENT         MID
---------- ---------- ----------
    test
    test            2

View 제약 조건

SQL>  select constraint_name,constraint_type,table_name  from user_constraints; 

CONSTRAINT_NAME            C   TABLE_NAME
------------------------------ - ------------------------------
FK_DEPTNO                  R       EMP
PK_EMP                     P       EMP
PK_DEPT                    P       DEPT

R foreign으로 설정됩니다. 키 제약 조건, C 검사 제약 조건, Q 고유 제약 조건, P 기본 키 제약 조건

제약 조건 수정

제약 조건 추가

alter table member add constraint pk_mid primary key(mid);
alter table member add constraint ck_age check(age between 0 and 200);
alter table member modify (name varchar2(50) not null);

null이 아닌 제약 조건은 수정 방법을 사용한다는 점에 유의해야 합니다

제약 조건 비활성화/활성화

비외래 키

alter table member disable constraint ck_age;
alter table member enable constraint ck_age;

외부 키

alter table member disable constraint pk_mid cascade;

제약 조건 삭제

alter table member drop constraint pk_mid cascade;
alter table member drop constraint ck_age;

위 내용은 SQL 무결성 제약 조건은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.