[SQL] SQL 키, PRI 대 UNI 대 MUL
SQLSQL 키, PRI 대 UNI 대 MUL
MySQL은 MUL, PRI와 UNI의 차이점은 무엇입니까?
나는 명령을 사용하여 MySQL의 쿼리에서 일하고 있어요 :
desc mytable;
필드 중 하나가 MUL 키 것으로 표시되고 다른 사람은 UNI 또는 PRI로 표시됩니다.
나는 키가 PRI 경우, 테이블 당 하나 개의 레코드가 해당 키와 연관 될 수 있다는 것을 알고. 키가 MUL 인 경우, 그 이상의 관련 기록이있을 수 있음을 의미 하는가?
여기 MYTABLE의 응답입니다.
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| courseid | int(11) | YES | MUL | NULL | |
| dept | char(3) | YES | | NULL | |
| coursenum | char(4) | YES | | NULL | |
+-----------+---------+------+-----+---------+-------+
해결법
-
==============================
1.이 필드 (부분)가 아닌 인덱스임을 의미한다. 당신은 실행할 수 있습니다
이 필드 (부분)가 아닌 인덱스임을 의미한다. 당신은 실행할 수 있습니다
show create table <table>;
테이블 구조에 대한 자세한 정보를 참조하십시오.
-
==============================
2.
DESCRIBE <table>;
이 사실에 대한 바로 가기입니다 :
SHOW COLUMNS FROM <table>;
어떤 경우에, "키"속성에 대한 세 가지 값이 있습니다 :
PRI와 UNI의 의미는 매우 명확하다 :
(당신이에 대해 질문) 세 번째 가능성, MUL는 기본적으로 기본 키도 고유 키도 아닌 인덱스입니다. 같은 값을 여러 번이 허용되기 때문에 이름은 "여러"에서 비롯됩니다. MySQL의 문서에서 스트레이트
최종 경고도 있습니다 :
일반적인 참고로, MySQL의 문서는 매우 좋다. 때 의심, 그것을 밖으로 체크!
-
==============================
3.MySQL의 5.7 문서에서 :
MySQL의 5.7 문서에서 :
대조군이 예는도 PRI, MUL,도 UNI있다 :
mysql> create table penguins (foo INT); Query OK, 0 rows affected (0.01 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | foo | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)
하나 개의 컬럼과 하나 개의 컬럼에 인덱스가있는 테이블은 MUL이있다 :
mysql> create table penguins (foo INT, index(foo)); Query OK, 0 rows affected (0.01 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | foo | int(11) | YES | MUL | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)
기본 키가있는 컬럼이있는 테이블을 보유 PRI
mysql> create table penguins (foo INT primary key); Query OK, 0 rows affected (0.02 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | foo | int(11) | NO | PRI | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)
고유 키는 열이있는 테이블은 UNI가 있습니다 :
mysql> create table penguins (foo INT unique); Query OK, 0 rows affected (0.01 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | foo | int(11) | YES | UNI | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)
인덱스 커버 foo는 바는 foo는에 MUL을 가지고있는 테이블 :
mysql> create table penguins (foo INT, bar INT, index(foo, bar)); Query OK, 0 rows affected (0.01 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | foo | int(11) | YES | MUL | NULL | | | bar | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
두 개의 열 두 개의 별도의 인덱스가있는 테이블은 각각에 대해 MUL있다
mysql> create table penguins (foo INT, bar int, index(foo), index(bar)); Query OK, 0 rows affected (0.01 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | foo | int(11) | YES | MUL | NULL | | | bar | int(11) | YES | MUL | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
세 개의 열 걸쳐 인덱스와 테이블은 처음에 MUL이있다 :
mysql> create table penguins (foo INT, bar INT, baz INT, INDEX name (foo, bar, baz)); Query OK, 0 rows affected (0.01 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | foo | int(11) | YES | MUL | NULL | | | bar | int(11) | YES | | NULL | | | baz | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
다른 테이블의 기본 키를 참조하는 외래 키가있는 테이블은 MUL입니다
mysql> create table penguins(id int primary key); Query OK, 0 rows affected (0.01 sec) mysql> create table skipper(id int, foreign key(id) references penguins(id)); Query OK, 0 rows affected (0.01 sec) mysql> desc skipper; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | MUL | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> desc penguins; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)
당신의 신피질에 "프라페 '에 다이얼을 설정하고 있음을 스틱.
-
==============================
4.도난의 경우,이 나에게도 도움이 문서이었다 - http://grokbase.com/t/mysql/mysql/9987k2ew41/key-field-mul-newbie-question
도난의 경우,이 나에게도 도움이 문서이었다 - http://grokbase.com/t/mysql/mysql/9987k2ew41/key-field-mul-newbie-question
"MUL 키는 복수의 열이 동일한 값을 가질 수 있음을 의미한다. 즉 고유 키 아닙니다이다. "
예를 들어, 당신은 두 가지 모델, 포스트 및 코멘트가 있다고 가정 해 보자. 포스트 코멘트와 has_many 관계를 가지고있다. 많은 의견이 같은 포스트에 기인 할 수 있기 때문에 코멘트 테이블이 MUL 키 (포스트 ID)를 가지고하는 것은 그 의미가있다.
from https://stackoverflow.com/questions/5317889/sql-keys-mul-vs-pri-vs-uni by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL을 사용하지 않고 젠토 설치 스크립트에서 ALTER 표 (0) | 2020.04.22 |
---|---|
[SQL] MySQL의 : 잠금 테이블 대 거래 (0) | 2020.04.22 |
[SQL] SQL VARCHAR 컬럼 길이에 대한 모범 사례 [마감] (0) | 2020.04.22 |
[SQL] MySQL을로 가져 오기 SQL 파일 (0) | 2020.04.22 |
[SQL] 데이터없이 MySQL을 수출 스키마 (0) | 2020.04.22 |