>  기사  >  데이터 베이스  >  mysql의 기본 키는 인덱스입니까?

mysql의 기본 키는 인덱스입니까?

青灯夜游
青灯夜游원래의
2021-12-27 17:40:286282검색

mysql의 기본 키는 인덱스가 아닙니다. 기본 키의 전체 이름은 테이블의 데이터에 대한 제약 조건인 "기본 키 제약 조건"이며, 테이블의 각 정보를 고유하게 식별할 수 있는 테이블의 특수 필드입니다. 데이터로 구성된 특수 데이터베이스 구조. 데이터 테이블의 특정 값이 있는 레코드를 빠르게 쿼리하는 데 사용할 수 있는 테이블의 하나 이상의 열 조합입니다.

mysql의 기본 키는 인덱스입니까?

이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.

MySQL 기본 키

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

제약 조건은 테이블의 데이터에 대한 제약 조건을 말하며, 이는 데이터베이스 관리자가 데이터베이스를 더 잘 관리하고 데이터베이스에 있는 데이터의 정확성과 유효성을 보장하는 데 도움이 될 수 있습니다.

기본 키는 테이블의 각 정보를 고유하게 식별하는 테이블의 특수 필드입니다. 예를 들어, 학생 정보 테이블의 학생 번호는 고유합니다.

기본 키는 단일 필드 기본 키와 다중 필드 공동 기본 키로 구분됩니다. 이 섹션에서는 이 두 가지 기본 키 제약 조건의 생성, 수정 및 삭제에 대해 각각 설명합니다.

기본 키를 사용할 때 다음 사항에 유의해야 합니다.

  • 각 테이블은 하나의 기본 키만 정의할 수 있습니다.

  • 기본 키 값은 테이블의 각 행을 고유하게 식별해야 하며 NULL일 수 없습니다. 즉, 테이블에 동일한 기본 키 값을 가진 두 개의 데이터 행이 있을 수 없습니다. 이것이 유일성의 원리이다.

  • 필드 이름은 공동 기본 키 필드 테이블에 한 번만 나타날 수 있습니다.

  • 공동 기본 키에는 불필요한 중복 필드를 포함할 수 없습니다. 공동 기본 키의 필드가 삭제된 경우 나머지 필드로 구성된 기본 키가 여전히 고유성 원칙을 만족하면 공동 기본 키가 올바르지 않습니다. 이것이 최소화의 원칙이다.

테이블 생성 시 기본 키 제약 조건 설정

데이터 테이블 생성 시 기본 키 제약 조건 설정 테이블의 한 필드에 기본 키를 설정하거나 테이블의 여러 필드에 공동 기본 키를 설정할 수 있습니다. 테이블. 그러나 어떤 방법을 사용하든 테이블에는 기본 키가 하나만 있을 수 있습니다. 다음은 단일 필드 기본 키와 다중 필드 공동 기본 키를 설정하는 방법을 설명합니다.

1) 단일 필드 기본 키 설정

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

필드 정의 시 기본 키를 지정합니다. 구문 형식은 다음과 같습니다.

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

예제 1

test_db 데이터베이스에 tb_emp3 데이터 테이블을 생성합니다. 기본 키는 id입니다. .

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 데이터 테이블을 생성합니다. 기본 키는 id입니다. 다음과 같습니다.

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) 테이블 생성 시 공동 기본 키를 설정하세요

공동 기본 키라고 불리는 것은 이 기본 키가 테이블의 여러 필드로 구성된다는 의미입니다.

예를 들어 학생 과목 선택 데이터 테이블을 설정할 때 학번을 기본 키로 사용해야 할까요, 아니면 과목 번호를 기본 키로 사용해야 할까요? 학번을 기본키로 사용하는 경우, 학생은 한 과목만 선택할 수 있습니다. 과목 번호를 기본 키로 사용하는 경우 한 명의 학생만 과목을 선택할 수 있습니다. 분명히 이 두 가지 상황은 모두 비현실적입니다.

실제로 학생 과목 선택 일정을 설계할 때 학생은 동일한 과목을 한 번만 선택할 수 있다는 제한이 있습니다. 따라서 학번과 학번을 함께 묶어서 하나의 기본키, 즉 공동기본키로 만들 수 있다.

기본 키는 여러 필드로 구성됩니다. 구문 형식은 다음과 같습니다.

PRIMARY KEY [字段1,字段2,…,字段n]

참고: 기본 키가 여러 필드로 구성된 경우 기본 키 제약 조건은 필드 이름 바로 뒤에 선언할 수 없습니다.

예제 3

데이터 테이블 tb_emp5를 생성합니다. 테이블에 기본 키 id가 없다고 가정하면 name과 deptId를 기본 키로 결합할 수 있습니다. 다음과 같이.

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

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

기본 키 제약 조건은 테이블을 생성하는 동안 생성할 수 있을 뿐만 아니라 테이블을 수정할 때 추가할 수도 있습니다. 다만, 기본키 제약조건으로 설정된 필드에는 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)

예제4

데이터 테이블 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 인덱스(Index)

인덱스는 데이터 테이블의 하나 이상의 열로 구성된 특별한 데이터베이스 구조로, 데이터 테이블의 특정 값을 가진 레코드를 빠르게 쿼리하는 데 사용할 수 있습니다.

인덱스를 사용하면 데이터 쿼리 시 기록된 정보를 모두 읽을 필요가 없고 인덱스 열만 쿼리하면 됩니다. 그렇지 않으면 데이터베이스 시스템은 일치를 위해 각 레코드의 모든 정보를 읽습니다.

색인은 신화사전의 발음 순서와 비교할 수 있습니다. 예를 들어 "ku"라는 단어를 찾으려면 발음 순서를 사용하지 않으면 400페이지에 달하는 사전에서 한 페이지씩 찾아야 합니다. 그러나 병음을 추출하여 표음순을 형성하는 경우에는 10페이지가 넘는 표음표에서 직접 찾아보면 된다. 이렇게 하면 많은 시간을 절약할 수 있습니다.

인덱싱의 장점과 단점

인덱싱에는 분명한 장점과 피할 수 없는 단점이 있습니다.

장점

인덱스의 장점은 다음과 같습니다.

  • 고유한 인덱스를 생성함으로써 데이터베이스 테이블의 각 데이터 행의 고유성을 보장할 수 있습니다.

  • 모든 MySQL 열 유형에 대해 인덱스를 설정할 수 있습니다.

  • 데이터 쿼리 속도를 크게 높일 수 있는데, 이것이 인덱스를 사용하는 주된 이유입니다.

  • 데이터의 참조 무결성을 달성하기 위해 테이블 ​​간의 연결을 가속화할 수 있습니다.

  • 데이터 쿼리에 그룹화 및 정렬 절을 사용하면 쿼리에서 그룹화 및 정렬하는 시간도 크게 줄일 수 있습니다.

단점

인덱스를 늘리는 것도 주로 다음과 같은 많은 단점이 있습니다.

  • 인덱스 그룹을 생성하고 유지하는 데는 시간이 걸리며, 데이터 양이 증가할수록 이 시간도 늘어납니다.

  • 인덱스는 데이터 테이블이 차지하는 데이터 공간 외에도 일정량의 물리적 공간을 차지합니다. 인덱스 수가 많은 경우 인덱스 파일은 데이터 파일보다 더 빠르게 최대 파일 크기에 도달할 수 있습니다.

  • 테이블의 데이터를 추가, 삭제, 수정하는 경우에도 인덱스를 동적으로 유지해야 하므로 데이터 유지 속도가 저하됩니다.

인덱스를 사용할 때는 인덱스의 장점과 단점을 고려해야 합니다.

인덱스는 쿼리 속도를 높일 수 있지만 레코드 삽입 속도에 영향을 미칩니다. 인덱스된 테이블에 레코드를 삽입할 때 데이터베이스 시스템은 인덱스에 따라 정렬하므로 레코드 삽입 속도가 감소하므로 많은 수의 레코드를 삽입할 때 속도 영향이 더 분명해집니다. 이 경우 가장 좋은 방법은 테이블의 인덱스를 먼저 삭제한 후 데이터를 삽입하고 삽입이 완료된 후 인덱스를 생성하는 것이다.

【관련 추천: mysql 비디오 튜토리얼

위 내용은 mysql의 기본 키는 인덱스입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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