>  기사  >  데이터 베이스  >  mysql에서 외래 키 제약 조건을 설정하는 방법은 무엇입니까?

mysql에서 외래 키 제약 조건을 설정하는 방법은 무엇입니까?

青灯夜游
青灯夜游원래의
2020-10-12 12:46:4114866검색

mysql에서 외래 키 제약 조건을 설정하는 방법: FOREIGN KEY 키워드를 통해 외래 키를 지정할 수 있습니다. 구문은 "ALTER TABLE 테이블 이름 ADD CONSTRAINT 외래 키 이름 FOREIGN KEY(열 이름) REFERENCES 기본 테이블 이름(열 이름); ".

mysql에서 외래 키 제약 조건을 설정하는 방법은 무엇입니까?

(권장 튜토리얼: mysql 비디오 튜토리얼)

(1) 외래 키 사용:

두 가지 주요 기능이 있습니다: 하나는 데이터베이스 자체가 외래 키를 통해 데이터의 무결성과 일관성을 보장하도록 합니다. 하나는 ER 다이어그램의 가독성을 높이는 것입니다. 어떤 사람들은 외래 키를 설정하면 개발 중에 데이터베이스에 많은 문제가 발생할 것이라고 생각합니다. 데이터베이스 개발자가 외래 키 감지를 통과하지 못해 작업을 삭제하거나 삽입하지 못하는 경우가 있는데, 이는 매우 번거로운 일이라고 생각합니다
사실 이 형식적인 외래 키를 사용하면 데이터의 무결성과 일관성을 보장할 수 있다는 점은 좋은 일입니다. .
예:
제품의 모든 정보를 기록하는 기본 데이터 테이블이 있습니다. 다른 테이블은 모두 제품 ID를 저장합니다. 쿼리시에는 테이블을 조인하여 제품명을 쿼리해야 합니다. 문서 1의 제품 테이블에는 제품 ID 필드가 있고, 문서 2의 제품 테이블에도 제품 ID 필드

가 있습니다. 외래키를 사용하지 않는 경우, 문서 1, 2 모두 제품ID = 3인 제품을 사용하는 경우, 제품 테이블에서 ID = 3인 해당 레코드를 삭제하면 조회시 해당 제품을 찾을 수 없게 됩니다. 문서 1과 2. 이름.
테이블 수가 적으면 프로그램 구현 시 스크립트를 작성하면 데이터의 무결성과 일관성을 보장할 수 있다고 생각하는 사람들도 있습니다. 즉, 상품 삭제 시, 상품ID 3의 상품이 문서 1, 2에서 사용되었는지 확인하는 것입니다. 그러나 스크립트 작성이 끝나면 시스템은 문서 3을 추가하고 제품 ID도 저장하고 필드를 찾습니다. 외래 키를 사용하지 않으면 제품 이름을 찾을 수 없습니다. 제품 ID를 사용하는 필드를 사용하는 문서를 추가할 때마다 스크립트를 수정하여 제품이 사용되는지 여부를 검색할 수 없습니다. 동시에 외래 키를 도입하면 속도와 성능이 저하됩니다.

(2) 외래 키 추가 형식:ALTER TABLE yourtablename ADD [CONSTRAINT 외래 키 이름] FOREIGN KEY [id] (index_col_name, ...)

REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE | SET NULL | NO ACTION | RESTRICT}]설명:삭제 및 업데이트 작업을 정의하는 데 사용됩니다. 다음은 업데이트 및 삭제 작업에 대한 다양한 제약 조건 유형입니다.
CASCADE:
외래 키 테이블의 외래 키 필드 값이 업데이트되거나 해당 필드가 있는 열이 삭제됩니다.
RESTRICT:
RESTRICT. 즉, 상위 테이블의 외래 키 관련 열 업데이트가 거부되고 레코드 삭제가 거부됩니다.
set null:
상위 테이블의 외래 키 관련 필드가 업데이트 또는 삭제된 경우 하위 테이블의 외래 키 열이 null로 설정됩니다.
삽입의 경우 하위 테이블의 외래 키 열에 입력된 값은 상위 테이블의 외래 키 관련 열의 기존 값만 가능합니다.



외래 키 정의는 다음 조건을 준수합니다. (전제 조건)
1)
모든 테이블은 InnoDB 유형이어야 하며 MySQL에서는 InnoDB 유형 테이블만 외래 키를 지원하므로 임시 테이블이 될 수 없습니다.
2 )
외래 키로 설정될 모든 필드는 인덱싱되어야 합니다.

3)

InnoDB가 아닌 테이블의 경우 FOREIGN KEY 하위 문장은 무시됩니다. 참고:
외래 키를 생성할 때 외래 키 이름을 정의할 때 따옴표를 추가할 수 없습니다.
예: 제약 조건 'fk_1' 또는 제약 조건 "fk_1"이 잘못되었습니다.

(3) 외래 키 보기:

SHOW CREATE TABLE ** *; 새로 생성된 테이블의 코드와 해당 스토리지 엔진을 볼 수 있습니다.
외래 키 삭제:
alter table drop 외래 키 이름
참고:
정의 외부에서만 키를 사용할 때 외래 키 이름 제약 조건을 사용하여 외래 키를 쉽게 삭제할 수 있습니다. 정의되지 않은 경우 다음을 수행할 수 있습니다. 먼저 입력: alter table drop foreign key --> an 이때, 외래키의 시스템 기본 외래키 이름이 표시됩니다. --->외래키를 삭제할 때 사용하세요.




(4) 예시


예 1: 4.1
Create Table Parent(ID Int Not Null,
Primary Key(ID)
) Type = InnoDB;- Type = InnoDB는 Engine = InnoDB
Create Table Child(ID Int, P, P, P Arent_id int,
        INDEX par_ind(parent_id),
                                                                             사용 through through through through through through through up ‐ ‐ ‐ ‐‐ ‐
부모에 데이터 삽입 후 , 자식에 데이터를 삽입합니다. 삽입할 때 자식의 parent_id 값은 부모의 데이터일 수 있습니다. 그렇지 않으면 삽입이 성공하지 못합니다.
부모 레코드가 삭제되면 자식의 해당 레코드도 삭제됩니다. 삭제;-->Because: on delete cascade
상위 레코드가 업데이트되면 업데이트되지 않습니다.-- >정의되지 않았기 때문에 기본적으로 제한이 사용됩니다.
4.2
하위 레코드가 다음과 같은 경우 다음:
mysql>
테이블 하위 생성(id int가 null이 아닌 기본 키 auto_increment,parent_id int,
index par_ind(parent_id),
constraint fk_1 외래 키(parent_id) 참조
parent(id) 삭제 계단식 업데이트 시 삭제 제한)
type=innodb;
위 내용을 사용하세요:
1).
상위 레코드가 업데이트되면 하위의 해당 레코드도 업데이트됩니다.--> 이유: 업데이트 계단식
2).
일 수 없습니다. 상위 테이블에 영향을 미치는 하위 테이블 작업입니다. 하위 테이블에 영향을 미치는 상위 테이블만 가능합니다.
3).
외래 키 삭제:
alter table child drop 외래 키 fk_1;
외래 키 추가 키:
alter table child 추가 제약 조건 fk_1 외래 키(parent_id) 참조
parent(id) 업데이트 시 제한 삭제 세트 null;


(5) 여러 개의 외래 키가 존재합니다:

product_order 나머지 두 개에 대한 테이블 테이블에 외래 키가 있습니다.

외래 키는 제품 테이블의 2열 인덱스를 의미합니다. Customer 테이블에 인용된 또 다른 단방향 인덱스:

Create Table Product (Category Int Not Null, ID Int Not Null, Price Decimal,
Primary Key (Category, ID)) Type = InnoDB
Cre ATE TABLE CUSTOMER (ID) INT NOT NULL,
                                                                                                                                       "

CREATE TABLE product_order(INT NOT NULL AUTO_INCREMENT 없음,
                     product_category INT NOT NULL,
                   product_id INT NOT NULL,
                     customer_id INT NOT NULL,
                     기본 키(아니요),
                   -- 双외键
                     INDEX (product_category, product_ 이드) ... TE 제한,
                     -- 单外键
                   INDEX(customer_id),
                  외부 키(customer_id)


                       참고 고객( id)) TYPE=INNODB;

(6) 说明:

1.若不声明업데이트/삭제,则默认是采用restrict方式.

2.对于键约束,最好是사용: 삭제 제한적 방법에 대한 업데이트 캐스케이드에 대해.

위 내용은 mysql에서 외래 키 제약 조건을 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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