source

SQL 키(MUL vs PRI vs UNI)

factcode 2023. 1. 9. 21:13
반응형

SQL 키(MUL vs PRI vs UNI)

MUL,PRI ★★★★★★★★★★★★★★★★★」UNIMySQL 서 my?

다음 명령을 사용하여 MySQL 쿼리를 작업 중입니다.

desc mytable; 

중 는 '이렇게 하다'로되어 있습니다.MUL은 ,, 른, 른으로 됩니다.UNI ★★★★★★★★★★★★★★★★★」PRI.

가 쇠가......PRI테이블마다 1개의 레코드만 그 키에 관련지을 수 있습니다.가 음음음음 MUL그럼 관련된 레코드가 여러 개 있을 수 있다는 뜻인가요?

합니다.mytable.

+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| courseid  | int(11) | YES  | MUL | NULL    |       | 
| dept      | char(3) | YES  |     | NULL    |       | 
| coursenum | char(4) | YES  |     | NULL    |       | 
+-----------+---------+------+-----+---------+-------+
DESCRIBE <table>; 

이는 사실상 다음 항목에 대한 지름길입니다.

SHOW COLUMNS FROM <table>;

어느 경우든 "Key" 속성에는 다음 세 가지 값이 있습니다.

  1. PRI
  2. UNI
  3. MUL

「 」의 PRI ★★★★★★★★★★★★★★★★★」UNI매우 명확합니다.

  • PRI > 프라이머리 키= > 머
  • UNI> => 고유키 > 고유키

번째 ★★★★★★★★★★★★★★★★★★★★★★★★★★」MUL(문의하신)는 기본적으로 프라이머리 키도 일의 키도 아닌 인덱스입니다.이 이름은 "multiple"에서 유래합니다. 같은 값의 여러 번 발생할 수 있기 때문입니다.MySQL 문서에서 직접:

ifKeyMUL컬럼은 컬럼 내에서 특정 값의 여러 오카렌스를 허용하는 비고유 인덱스의 첫 번째 컬럼입니다.

마지막 경고도 있습니다.

값이 높은 우선순위를 가진 합니다.PRI,UNI,MUL.

일반적으로 MySQL 문서는 매우 우수합니다.의심스러울 때는 확인하세요!

즉, 필드가 고유하지 않은 인덱스의 일부임을 의미합니다.발행할 수 있습니다.

show create table <table>;

테이블 구조에 대한 자세한 내용을 보려면 다음과 같이 하십시오.

MySQL의 MUL, PRI 및 UNI란 무엇입니까?

MySQL 5.7 매뉴얼에서 다음 내용을 참조하십시오.

  • 키가 PRI일 경우 열은 PRIMAY KEY이거나 여러 열의 PRIMAY KEY 열 중 하나입니다.
  • Key가 UNI일 경우 열은 UNIQUIC 인덱스의 첫 번째 컬럼입니다(UNIQUIC 인덱스는 여러 NULL 값을 허용하지만 NULL 필드를 선택하면 해당 컬럼이 NULL을 허용하는지 여부를 알 수 있습니다).
  • 키가 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)

1개의 컬럼과 1개의 컬럼에 인덱스가 있는 테이블에는 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"로 맞추세요.

Mul에게 이것은 나에게도 도움이 되는 문서였습니다 - http://grokbase.com/t/mysql/mysql/9987k2ew41/key-field-mul-newbie-question

「MUL은, 복수의 행에 같은 값을 설정할 수 있는 것을 의미합니다.즉, UNIque 키가 아닙니다."

예를 들어, Post와 Comment라는 두 가지 모델이 있다고 가정합니다.게시물은 댓글과 has_many 관계가 있습니다.댓글 테이블에는 MUL 키(Post id)가 붙어 있습니다.이는 다수의 코멘트를 같은 투고에 할당할 수 있기 때문입니다.

UNI: UNIE의 경우:

  • 레코드를 고유하게 식별하기 위한 테이블의 하나 이상의 열 집합입니다.
  • 테이블에는 여러 개의 고유 키를 포함할 수 있습니다.
  • 프라이머리 키와 마찬가지로 원하는 값을 사용할 수 있지만 프라이머리 키가 허용하지 않는1개의 늘 값을 받아들일 수 있습니다.

PRI: 프라이머리:

  • 레코드를 고유하게 식별하기 위한 테이블의 하나 이상의 열 집합이기도 합니다.
  • 테이블에는 프라이머리 키를 1개만 사용할 수 있습니다.
  • 이는 하나의 값을 허용하지만 null 값을 허용하지 않는 UNIQURE 키와 매우 유사합니다.

MUL: 다중의 경우:

  • 또한 레코드를 고유하게 식별하지 않는 테이블의 하나 이상의 열 집합입니다.
  • 테이블에는 여러 개의 MULTIPLE 키를 사용할 수 있습니다.
  • 인덱스 또는 외부 키 추가 시 테이블에 생성할 수 있으며 null 값은 사용할 수 없습니다.
  • 컬럼에 중복된 엔트리를 허용합니다.
  • MUL 열 유형을 지정하지 않으면 일반 열과 비슷하지만 늘 엔트리를 허용할 수 있습니다.이러한 엔트리를 제한하려면 지정해야 합니다.
  • 열에 인덱스를 추가하거나 외부 키를 추가하면 자동으로 MUL 키 유형이 추가됩니다.

간단한 말로 이해합시다.

  • PRI - 프라이머리 키이며 레코드를 일의로 식별하는 데 사용됩니다.
  • UNI - 고유 키이며 레코드를 고유하게 식별하는 데도 사용됩니다.프라이머리 키와 비슷하지만 테이블에는 여러 개의 고유 키와 하나의 null 값을 사용할 수 있습니다.반면 테이블에는 프라이머리 키를 하나만 사용할 수 있으며 null을 프라이머리 키로 저장할 수 없습니다.
  • MUL - 고유한 제약조건이 없으며 테이블에는 여러 개의 MUL 열을 포함할 수 있습니다.

주의: 이 키들은 개념적으로 좀 더 깊이가 있지만 시작하기에 좋습니다.

언급URL : https://stackoverflow.com/questions/5317889/sql-keys-mul-vs-pri-vs-uni

반응형