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

mysql에서 기본 및 외래 키 제약 조건을 작성하는 방법은 무엇입니까?

青灯夜游
青灯夜游원래의
2020-10-09 10:58:3719978검색

Mysql 기본 키 제약 조건은 "CREATE TABLE 테이블 이름(필드 이름 데이터 유형 PRIMARY KEY)"로 작성됩니다. mysql 외래 키 제약 조건은 "CREATE TABLE 테이블 이름(FOREIGN KEY 필드 이름 REFERENCES 기본 테이블 이름 기본 키 열)로 작성됩니다. )".

mysql에서 기본 및 외래 키 제약 조건을 작성하는 방법은 무엇입니까?

(추천 튜토리얼: mysql 동영상 튜토리얼)

mysql 기본 키 제약 조건

기본 키(PRIMARY KEY)의 전체 이름은 "기본 키 제약 조건"으로, 가장 MySQL에서 자주 사용되는 제약 조건. 일반적인 상황에서는 DBMS가 테이블에서 레코드를 더 빨리 찾을 수 있도록 테이블에 기본 키가 설정됩니다.

1. 테이블 생성 시 기본 키 제약 조건을 설정합니다.

CREATE TABLE 문에서 PRIMARY KEY 키워드를 통해 기본 키를 지정합니다.

필드를 정의할 때 기본 키를 지정하세요. 구문 형식은 다음과 같습니다.

<字段名> <数据类型> PRIMARY KEY [默认值]

예제 1

기본 키가 id인 tb_emp3 데이터 테이블을 만듭니다. 다음과 같습니다.

mysql> CREATE TABLE tb_emp3
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp3;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)

또는 모든 필드를 정의한 후 기본 키를 지정합니다. 구문 형식은 다음과 같습니다.

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

예제 2

test_db 데이터베이스에 tb_emp4 데이터 테이블을 생성하고 해당 SQL 문을 실행합니다. 결과는 다음과 같습니다.

mysql> CREATE TABLE tb_emp4
    -> (
    -> id INT(11),
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp4;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)

2. 테이블 수정 시 기본 키 제약 조건 추가

기본 키 제약 조건은 테이블 생성 시 생성할 수 있을 뿐만 아니라, 테이블 수정 시에도 추가할 수 있습니다. 다만, 기본키 제약조건으로 설정된 필드에는 null 값이 허용되지 않는다는 점에 유의해야 한다.

데이터 테이블 수정 시 기본 키 제약 조건을 추가하는 구문 형식은 다음과 같습니다.

ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);

tb_emp2 데이터 테이블의 테이블 구조를 확인하는 SQL 문 및 실행 결과는 다음과 같습니다.

mysql> DESC tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   |     | NULL    |       |
| name   | varchar(30) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)

예제 3

데이터 테이블 tb_emp2를 수정하고 id 필드를 기본 키로 설정한 SQL 문과 실행 결과는 다음과 같습니다.

mysql> ALTER TABLE tb_emp2
    -> ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.94 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(30) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.12 sec)

일반적으로 테이블 수정 시 테이블 내 필드의 기본 키 제약 조건을 설정하려면 기본 키 제약 조건으로 설정된 필드의 값이 중복될 수 없고, 널. 그렇지 않으면 기본 키 제약 조건을 설정할 수 없습니다.

mysql 외래 키 제약 조건

MySQL 외래 키 제약 조건(FOREIGN KEY)은 테이블의 특수 필드로, 기본 키 제약 조건과 함께 자주 사용됩니다. 연결된 관계가 있는 두 테이블의 경우, 연결된 필드의 기본 키가 있는 테이블이 기본 테이블(부모 테이블)이고, 외래 키가 있는 테이블이 보조 테이블(자식 테이블)입니다.

외래 키는 마스터 테이블과 슬레이브 테이블 간의 관계를 설정하고, 두 테이블의 데이터에 대한 연결을 설정하고, 두 테이블의 데이터 일관성과 무결성을 제한하는 데 사용됩니다. 예를 들어, 과일 가판대에는 사과, 복숭아, 자두, 수박 네 가지 과일만 있는데, 과일을 사러 과일 가판대에 오면 사과, 복숭아, 자두, 수박만 선택할 수 있고, 다른 과일은 살 수가 없어요.

외래 키를 정의할 때 다음 규칙을 준수해야 합니다.

  • 메인 테이블은 데이터베이스에 이미 존재하거나 현재 생성 중인 테이블이어야 합니다. 후자의 경우 마스터 테이블과 슬레이브 테이블이 동일한 테이블인 경우 이러한 테이블을 자기참조 테이블이라 하며, 이러한 구조를 자기참조 무결성이라 한다.

  • 기본 테이블에 대한 기본 키를 정의해야 합니다.

  • 기본 키에는 null 값이 포함될 수 없지만 외래 키에는 null 값이 허용됩니다. 즉, null이 아닌 모든 외래 키 값이 지정된 기본 키에 나타나는 한 외래 키의 내용은 정확합니다.

  • 메인 테이블의 테이블 이름 뒤에 컬럼 이름을 지정하거나 컬럼 이름의 조합을 지정하세요. 이 열 또는 열 조합은 기본 테이블의 기본 키 또는 후보 키여야 합니다.

  • 외래 키의 열 수는 기본 테이블의 기본 키의 열 수와 동일해야 합니다.

  • 외래 키에 있는 열의 데이터 유형은 기본 테이블의 기본 키에 있는 해당 열의 데이터 유형과 동일해야 합니다.

1. 테이블 생성 시 외래 키 제약 조건 설정

CREATE TABLE 문에서 FOREIGN KEY 키워드를 통해 외래 키를 지정합니다.

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]

예제 4

이 예제에서는 테이블 간의 외래 키 관계를 보여주기 위해 test_db 데이터베이스에 부서 테이블 tb_dept1을 생성합니다. 테이블 구조는 다음 표와 같습니다.

필드 이름 데이터 유형 Remarks
id INT(11) 부서 번호
name VARCHAR(22) 부서명
위치 VARCHAR(22) 부서 위치

创建 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)

以上语句执行成功之后,在表 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

注意:从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。例如,两者都是 INT 类型,或者都是 CHAR 类型。如果不满足这样的要求,在创建从表时,就会出现“ERROR 1005(HY000): Can't create table”错误。

2、在修改表时添加外键约束

外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

在修改数据表时添加外键约束的语法格式如下:

ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

例 5

修改数据表 tb_emp2,将字段 deptId 设置为外键,与数据表 tb_dept1 的主键 id 进行关联,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)

注意:在为已经创建好的数据表添加外键约束时,要确保添加外键约束的列的值全部来源于主键列,并且外键列不能为空。

相关推荐:php培训

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

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