mysql에 외래 키를 추가하는 방법: 1. CREATE TABLE 문에서 FOREIGN KEY 키워드를 통해 외래 키를 추가합니다. 2. ALTER TABLE 문에서 ADD 및 FOREIGN KEY 키워드를 통해 외래 키를 추가합니다.
추천 과정: MySQL 튜토리얼.
MySQL 외래 키 제약 조건(FOREIGN KEY)은 테이블의 특수 필드로, 기본 키 제약 조건과 함께 자주 사용됩니다. 연결된 관계가 있는 두 테이블의 경우, 연결된 필드의 기본 키가 있는 테이블이 기본 테이블(부모 테이블)이고, 외래 키가 있는 테이블이 보조 테이블(자식 테이블)입니다.
외래 키는 마스터 테이블과 슬레이브 테이블 간의 관계를 설정하고, 두 테이블의 데이터에 대한 연결을 설정하고, 두 테이블의 데이터 일관성과 무결성을 제한하는 데 사용됩니다. 예를 들어, 과일 가판대에는 사과, 복숭아, 자두, 수박 네 가지 과일만 있는데, 과일을 사러 과일 가판대에 오면 사과, 복숭아, 자두, 수박만 선택할 수 있고, 다른 과일은 살 수가 없어요.
메인 테이블에서 레코드가 삭제되면 테이블의 해당 레코드도 그에 따라 변경되어야 합니다. 테이블에는 하나 이상의 외래 키가 있을 수 있으며, 외래 키는 null이 아닐 수 있습니다. 각 외래 키의 값은 기본 테이블의 기본 키의 특정 값과 같아야 합니다.
외래 키를 정의할 때 다음 규칙을 준수해야 합니다.
메인 테이블은 데이터베이스에 이미 존재하거나 현재 생성 중인 테이블이어야 합니다. 후자의 경우 마스터 테이블과 슬레이브 테이블이 동일한 테이블인 경우, 이러한 테이블을 자기 참조 테이블이라고 하며, 이러한 구조를 자기 참조 무결성이라고 합니다.
기본 테이블에 대한 기본 키를 정의해야 합니다.
기본 키에는 null 값이 포함될 수 없지만 외래 키에는 null 값이 허용됩니다. 즉, null이 아닌 모든 외래 키 값이 지정된 기본 키에 나타나는 한 외래 키의 내용은 정확합니다.
메인 테이블의 테이블 이름 뒤에 컬럼 이름을 지정하거나 컬럼 이름의 조합을 지정하세요. 이 열 또는 열 조합은 기본 테이블의 기본 키 또는 후보 키여야 합니다.
외래 키의 열 수는 기본 테이블의 기본 키의 열 수와 동일해야 합니다.
외래 키에 있는 열의 데이터 유형은 기본 테이블의 기본 키에 있는 해당 열의 데이터 유형과 동일해야 합니다.
테이블 생성 시 외래 키 제약 조건 설정
CREATE TABLE 문에서 FOREIGN KEY 키워드를 통해 외래 키를 지정합니다. 구체적인 구문 형식은 다음과 같습니다.
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]
예제 1
For 테이블 간의 외래 키 관계를 표시하기 위해 이 예제에서는 test_db 데이터베이스에 부서 테이블 tb_dept1을 생성합니다. 테이블 구조는 다음 표와 같습니다.
tb_dept1을 생성한 SQL 문과 실행 결과는 다음과 같습니다.
mysql> CREATE TABLE tb_dept1 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22) NOT NULL, -> location VARCHAR(50) -> ); Query OK, 0 rows affected (0.37 sec)
데이터 테이블 tb_emp6을 생성하고, 테이블 tb_emp6에 외래 키 제약 조건을 생성하여 해당 키 deptId가 테이블 tb_dept1의 기본 키 ID에 외래 키로 연결되도록 합니다. SQL 문 및 실행 결과는 다음과 같습니다. .
mysql> CREATE TABLE tb_emp6 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> CONSTRAINT fk_emp_dept1 -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_emp6; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptId | int(11) | YES | MUL | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (1.33 sec)
위 명령문이 성공적으로 실행되면 fk_emp_dept1이라는 외래 키 제약 조건이 테이블 tb_emp6에 추가됩니다. 외래 키 이름은 deptId이며 이는 테이블 tb_dept1의 기본 키 ID에 따라 달라집니다.
참고: 보조 테이블의 외래 키는 기본 테이블의 기본 키와 관련되어야 하며 기본 키와 외래 키의 데이터 유형이 일치해야 합니다. 예를 들어, 둘 다 INT 유형이거나 둘 다 CHAR 유형입니다. 이러한 요구 사항이 충족되지 않으면 슬레이브 테이블 생성 시 "ERROR 1005 (HY000): Can't create table" 오류가 발생합니다.
테이블 수정 시 외래 키 제약 조건 추가
테이블 수정 시 외래 키 제약 조건을 추가할 수도 있지만, 외래 키 제약 조건을 추가하기 위한 전제 조건은 슬레이브 테이블의 외래 키 열에 있는 데이터입니다. 기본 테이블의 데이터와 일치해야 합니다. 기본 키 열의 데이터가 일치하거나 데이터가 없습니다.
데이터 테이블 수정 시 외래 키 제약 조건을 추가하는 구문 형식은 다음과 같습니다.
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
예제 2
데이터 테이블 tb_emp2를 수정하고, deptId 필드를 외래 키로 설정하고, 이를 기본 키 ID와 연결합니다. 데이터 테이블 tb_dept1, SQL문 및 실행 결과는 아래와 같습니다.
mysql> ALTER TABLE tb_emp2 -> ADD CONSTRAINT fk_tb_dept1 -> FOREIGN KEY(deptId) -> REFERENCES tb_dept1(id); Query OK, 0 rows affected (1.38 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`), CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.12 sec)
참고: 생성된 데이터 테이블에 외래 키 제약 조건을 추가할 때 외래 키 제약 조건이 추가된 열의 값이 모두 기본 키 열에서 오는지 확인하고 외래 키 열은 비워 둘 수 없습니다. .
외래 키 제약 조건 삭제
외래 키 제약 조건이 테이블에 더 이상 필요하지 않으면 테이블에서 삭제해야 합니다. 외래 키가 삭제되면 마스터 테이블과 슬레이브 테이블 간의 연결이 해제됩니다.
외래 키 제약 조건을 삭제하는 구문 형식은 다음과 같습니다.
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
예제 3
데이터 테이블 tb_emp2에서 외래 키 제약 조건 fk_tb_dept1을 삭제합니다. SQL 문 및 실행 결과는 다음과 같습니다.
mysql> ALTER TABLE tb_emp2 -> DROP FOREIGN KEY fk_tb_dept1; Query OK, 0 rows affected (0.19 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.00 sec)
tb_emp2에 FOREIGN KEY가 더 이상 존재하지 않고 fk_emp_dept라는 원래 외래 키 제약 조건이 성공적으로 삭제된 것을 확인할 수 있습니다.
위 내용은 mysql에 외래 키를 추가하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!