SQL 키, MUL vs PRI vs UNI
차이점은 무엇이며 MUL
, PRI
그리고 UNI
MySQL은은?
다음 명령을 사용하여 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 | |
+-----------+---------+------+-----+---------+-------+
이는 필드가 고유하지 않은 인덱스의 일부임을 의미합니다. 당신은 발행 할 수 있습니다
show create table <table>;
테이블 구조에 대한 자세한 정보를 보려면
DESCRIBE <table>;
이것은 바로 다음에 대한 바로 가기입니다.
SHOW COLUMNS FROM <table>;
어쨌든 "Key"속성에 대한 세 가지 가능한 값이 있습니다.
PRI
UNI
MUL
의 의미 PRI
와 UNI
분명하다 :
PRI
=> 기본 키UNI
=> 고유 키
세 번째 가능성 MUL
은 (기본적으로 기본 키도 아니고 고유 키도 아닌) 인덱스입니다. 동일한 값을 여러 번 사용할 수 있으므로 이름은 "다중"에서 유래합니다. 로부터 직선 의 MySQL 문서 :
경우
Key
이고MUL
, 컬럼은 주어진 값을 여러 번가 칼럼 내의 허용 된 고유하지 않은 인덱스의 첫 번째 열이다.
마지막주의 사항도 있습니다.
키 값 중 하나 이상의 테이블의 특정 컬럼에 적용되는 경우, 키 표시 순서대로 우선 순위가 가장 높은 한,
PRI
,UNI
,MUL
.
일반적으로 MySQL 문서는 상당히 좋습니다. 확실하지 않으면 확인하십시오!
MySQL에서 MUL, PRI 및 UNI는 무엇입니까?
보내는 사람 의 MySQL 5.7 문서 :
- Key가 PRI 인 경우 열은 PRIMARY KEY이거나 다중 열 PRIMARY KEY의 열 중 하나입니다.
- Key가 UNI 인 경우 열은 UNIQUE 인덱스의 첫 번째 열입니다. UNIQUE 인덱스는 여러 NULL 값을 허용하지만 Null 필드를 확인하여 열이 NULL을 허용하는지 알 수 있습니다.
- Key가 MUL 인 경우, 열은 주어진 값의 여러 항목이 열 내에서 허용되는 고유하지 않은 인덱스의 첫 번째 열입니다.
라이브 예
제어 그룹,이 예에는 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 및 bar를 포함하는 인덱스가있는 테이블은 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)
신피질에 붙이고 다이얼을 "frappe"로 설정하십시오.
도난의 경우,이 나에게도 도움이 문서이었다 - http://grokbase.com/t/mysql/mysql/9987k2ew41/key-field-mul-newbie-question
"MUL은 키가 여러 행에 동일한 값을 가질 수 있음을 의미합니다. 즉, 고유 키가 아닙니다."
예를 들어 Post와 Comment라는 두 가지 모델이 있다고 가정합니다. Post는 Comment와 has_many 관계를 가지고 있습니다. 많은 주석이 동일한 Post에 기인 할 수 있기 때문에 Comment 테이블이 MUL 키 (Post id)를 갖는 것이 이치에 맞습니다.
참고 URL : https://stackoverflow.com/questions/5317889/sql-keys-mul-vs-pri-vs-uni
'Programing' 카테고리의 다른 글
구글 드라이브에서 wget / curl 큰 파일 (0) | 2020.04.16 |
---|---|
두 날짜 사이의 일 수를 계산하는 방법 (0) | 2020.04.16 |
“잠금 대기 시간 초과를 초과했습니다. (0) | 2020.04.16 |
Swift와 인터넷 연결 확인 (0) | 2020.04.16 |
트위터의 부트 스트랩을 사용하여 인라인으로 목록을 표시하는 방법 (0) | 2020.04.16 |