1. Primary Key(기본 키)란
- 테이블의 각 레코드를 식별
- 중복되지 않은 고유값을 포함
- NULL 값을 포함할 수 없음
- 테이블 당 하나의 기본키를 가짐
2. Primary Key 생성 문법1
Create table시 변수 설정할 때 primary key를 설정할 컬럼을 마지막에 나열한다.
Constraint constraint_name Primary Key (컬럼1, 컬럼2, ...)를 마지막에 써준다.
이 때 Constraint constraint_name은 생략이 가능하고 Primary Key (컬럼1, 컬럼2, ...)만 적어도 된다.
constraint_name 는 primary key의 이름으로 지정할 이름을 넣어주면 된다.
CREATE TABLE tablename
(
column1 datatype NOT NULL,
column2 datatype NOT NULL,
...
CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ...)
);
주의) constraint_name이 같은 primary key는 컬럼이 다르더라도 하나의 primary key라는 뜻이다.
3. Primary Key 삭제 문법
ALTER TABLE tablename DROP PRIMARY KEY;
이름을 별도로 주지 않아도 되는 이유는 table당 하나의 primary key만 갖고있기 때문에 tablename만 적어도 drop primary key를 하면 삭제되기 때문이다.
컬럼이 하나일 때와 컬럼이 여러개 일 때 상관없이 동일한 방법으로 삭제할 수 있다.
4. Primary Key 생성 문법2
ALTER TABLE tablename ADD [CONSTRAINT constraint_name] PRIMARY KEY (column1, column2, ...);
변수를 지정할 때 primary key를 설정해준다. [] 안의 constraint는 생략가능하다
5. Foreign Key(외래 키)란
- 한 테이블을 다른 테이블과 연결해주는 역할
- 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)
6. Foreign Key 생성 문법1
Create Table tablename
(
column1 datatype NOT null,
column2 datatype NOT null,
column3 datatype,
column4 datatype,
...
[CONSTRAINT constraint_name] PRIMARY KEY (column1, column2, ...),
[CONSTRAINT constraint_name] FOREIGN KEY (column3, column4, ...) REFERENCES REF_tablename(REF_column)
);
꼭 References로 다른 테이블과 연결시켜야 한다. constraint는 생략가능하다.
Foreign key는 Primary key와 다르게 한 테이블에 여러개 있을 수 있다.
이 때 자동 생성된 CONSTRAINT 이름을 확인하는 방법은
SHOW CREATE TABLE tablename;
을 통해 확인가능하다.
7. Foreign Key 삭제 문법
foreign key의 경우 constraint가 테이블에 여러개 있을 수 있으므로 constraint name을 꼭 지정해줘야 한다.
ALTER TABLE tablename DROP FOREIGN KEY FK_constraint;
desc tablename 했을 때 KEY에 MUL이라고 foreign key가 남아있다고 뜨겠지만
show create table tablename;을 통해 확인해보면 reference는 깨져있고 key 속성만 남아있는 걸 확인할 수 있다.
8. Foreign Key 생성 문법2
이제 먼저 만들어진 table에 foreign key를 추가하는 방법에 대해 알아보자.
ALTER TABLE tablename ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column);
create가 아닌 alter로 추가하면 된다.
'코딩 > SQL' 카테고리의 다른 글
[MySQL] Scalar Functions : ucase, lcase, mid, length, round, now, format (0) | 2023.03.05 |
---|---|
[MySQL] Aggregate Functions(집계함수) count, sum, avg, min, max, group by, having (0) | 2023.03.05 |
[MySQL] Python으로 SQL 사용하기 (0) | 2023.02.28 |
[MySQL] Table 삭제 시 오류 : foreign key 가 있는데 truncate/delete 하는 경우 (0) | 2023.02.24 |
[MySQL] SQL file VScode에서 실행하기 (0) | 2023.02.21 |