1. 외래 키와 제약 사이의 구분
Ref ) https://code.i-harness.com/ko/q/4bd21
예, 외래 키는 제약의 한 유형입니다. MySQL에는 제약 조건에 대한 불균등 지원이 있습니다.
PRIMARY KEY
: 테이블 제한 조건 및 열 제한 조건으로 예.FOREIGN KEY
: 테이블 제약 조건으로 yes, InnoDB 및 BDB 스토리지 엔진에서만 가능. 그렇지 않으면 구문 분석되지만 무시됩니다.CHECK
: 모든 저장소 엔진에서 구문 분석되지만 무시됩니다.UNIQUE
: 테이블 제한 조건 및 열 제한 조건으로 예.NOT NULL
: 열 제한 조건으로 예.DEFERRABLE
및 기타 제한 조건 속성 : 지원하지 않습니다.
CONSTRAINT
절을 사용하면 제한 조건을 명시 적으로 명명 할 수 있습니다. 메타 데이터를보다 쉽게 읽을 수 있도록하거나 제한 조건을 h 제할 때이 이름을 사용하십시오. SQL 표준은 CONSTRAINT
절이 선택적 CONSTRAINT
요구합니다. 생략하면 RDBMS는 자동으로 이름을 만들고 이름은 구현에 달려 있습니다.
일반적으로 (필수 MySQL이 아닌) 외래 키는 제약 조건이지만 제약 조건은 항상 외래 키가 아닙니다. 기본 키 제약 조건, 고유 제약 조건 등을 생각해보십시오.
MySQL에서는 대답 할 수 없지만 FK는 제약이 있습니다. 데이터를 일정한 조건으로 강제하는 것은 제약 조건입니다. 제약 조건에는 여러 가지가 있습니다. 고유, 기본 키, 검사 및 외래 키는 모두 제약 조건입니다. 어쩌면 MySQL에는 다른 것이 있습니다.
때로는 단어가 명령에 허용되지만 DELETE 문에서 FROM과 같이 가독성을 위해 명확하게 요구되지는 않습니다.
제가 잘못하지 않았다면 제약 조건은 인덱스가 필요합니다. 예를 들어, 외래 키 제약 조건을 만들 때 MySQL은 자동으로 인덱스를 생성합니다.
2. https://code.i-harness.com/ko/q/512501
MySQL에서 MUL, PRI 및 UNI 란 무엇인가?
MySQL 5.7 문서에서 :
- 키가 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)
인덱스가 3 열에 걸친 테이블은 첫 번째에 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은 키가 여러 행이 동일한 값을 가질 수 있음을 의미합니다. 즉 UNI 키가 아닙니다."
예를 들어 게시 및 댓글이라는 두 가지 모델이 있다고 가정 해 보겠습니다. 게시물에 Comment와 has_many 관계가 있습니다. 많은 댓글이 동일한 게시물에 기인 할 수 있기 때문에 댓글 테이블에 MUL 키 (게시물 ID)가있는 것이 좋습니다.
즉, 하나의 키 조합 만 존재할 수 있습니다.
예를 들어 기본 키가있는 테이블 (product_id, sequence_id)이있는 경우 여러 product_id 15, 여러 sequence_id 20을 가질 수 있지만 product_id, sequence_id = (15, 20)
'W01. Work & IT > w16. [개발-DB]' 카테고리의 다른 글
[DB-tool] TOAD 에서 tnsname.ora 인식못하는 오류 (0) | 2021.03.15 |
---|---|
[ORACLE] 날짜변환 (0) | 2018.10.04 |
[설치_TOOL] SQL Developer 설치, 접속 정리 (0) | 2015.09.11 |
[ERD 활용] #01. ERD 로 관리하기 (DBA 님에게 배운 꿀팁^^) (0) | 2015.09.04 |
[오라클설치후] CMD 로 접속 (0) | 2015.08.31 |