복붙노트

[SQL] SQL 키, PRI 대 UNI 대 MUL

SQL

SQL 키, 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. ==============================

    1.이 필드 (부분)가 아닌 인덱스임을 의미한다. 당신은 실행할 수 있습니다

    이 필드 (부분)가 아닌 인덱스임을 의미한다. 당신은 실행할 수 있습니다

    show create table <table>;
    

    테이블 구조에 대한 자세한 정보를 참조하십시오.

  2. ==============================

    2.

    DESCRIBE <table>; 
    

    이 사실에 대한 바로 가기입니다 :

    SHOW COLUMNS FROM <table>;
    

    어떤 경우에, "키"속성에 대한 세 가지 값이 있습니다 :

    PRI와 UNI의 의미는 매우 명확하다 :

    (당신이에 대해 질문) 세 번째 가능성, MUL는 기본적으로 기본 키도 고유 키도 아닌 인덱스입니다. 같은 값을 여러 번이 허용되기 때문에 이름은 "여러"에서 비롯됩니다. MySQL의 문서에서 스트레이트

    최종 경고도 있습니다 :

    일반적인 참고로, MySQL의 문서는 매우 좋다. 때 의심, 그것을 밖으로 체크!

  3. ==============================

    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. ==============================

    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)를 가지고하는 것은 그 의미가있다.

  5. from https://stackoverflow.com/questions/5317889/sql-keys-mul-vs-pri-vs-uni by cc-by-sa and MIT license