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

清浅
풀어 주다: 2020-09-15 11:46:59
원래의
17218명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿