1. 기본키(Primary Key) 더 알기
- 중복되지 않는 고유값만 허용
- NULL 값 허용하지 않음
- 테이블당 하나의 기본키만 지정 가능
-- 기본키 넣는 방법 1
CREATE TABLE people (
first_name CHAR(2) PRIMARY KEY,
last_name CHAR(3),
nickname VARCHAR(10)
);
-- 기본키 넣는 방법 2
CREATE TABLE people (
first_name CHAR(2),
last_name CHAR(3),
nickname VARCHAR(10),
PRIMARY KEY (first_name)
);
기본 키 변경하기
ALTER TABLE people DROP PRIMARY KEY;
ALTER TABLE people ADD PRIMARY KEY (last_name);
다중 기본키
CREATE TABLE people (
first_name CHAR(2),
last_name CHAR(3),
nickname VARCHAR(10),
PRIMARY KEY (first_name, last_name)
);
INSERT INTO PEOPLE VALUES('홍', '길동', '별명');
INSERT INTO PEOPLE VALUES('전', '우치', '별명');
INSERT INTO PEOPLE VALUES('전', '길동', '별명');
INSERT INTO PEOPLE VALUES('홍', '우치', '별명');
INSERT INTO PEOPLE VALUES('홍', '길동', '별명');
INSERT INTO PEOPLE VALUES('전', '우치', '별명');
2. 고유키(Unique) 더 알기
- 중복 제한, NULL 값 가능
-- 고유키 넣는 방법 1
CREATE TABLE people (
person_id INT AUTO_INCREMENT PRIMARY KEY,
first_name CHAR(2) UNIQUE,
last_name CHAR(3)
);
-- 고유키 넣는 방법 2
CREATE TABLE people (
person_id INT AUTO_INCREMENT PRIMARY KEY,
first_name CHAR(2),
last_name CHAR(3),
UNIQUE (first_name)
);
-- 다중 고유키
CREATE TABLE people (
person_id INT AUTO_INCREMENT PRIMARY KEY,
first_name CHAR(2),
last_name CHAR(3),
UNIQUE (first_name, last_name)
);
3. 외래키
외래 키 추가하기
ALTER TABLE _자식테이블명
ADD CONSTRAINT _제약명
FOREIGN KEY ( _자식테이블외래키 )
REFERENCES 부모테이블명 ( _부모테이블기본키 )
-- ON DELETE _삭제시제약
-- ON UPDATE _수정시제약
외래 키 삭제하기
ALTER TABLE _자식테이블명 DROP FOREIGN KEY _자식테이블외래키
- 💡 외래키는 NULL값이거나 또는 부모 테이블의 기본 키값과 같아야 합니다.
businesses에 sections에 대한 외래키를 설정한 뒤 실행해보세요.
INSERT INTO businesses
(fk_section_id, business_name, status, can_takeout)
VALUES ('8', '섹션에없는식당', 'OPN', '1');
외래 키 제약
제약 | 설명 | 비고 |
---|---|---|
NO ACTION, RESTRICT | 자식 테이블에 해당 외래키가 있을 때 수정/삭제되지 않음 | |
CASCADE | 자식 테이블의 해당 행도 수정/삭제 | |
SET NULL | 자식 테이블의 외래키를 NULL로 | 자식 외래키가 NOT NULL일 시 설정 불가 |
SET DEFAULT | 자식 테이블의 외래키를 기본값으로 | InnoDB 엔진에서 사용 불가 |
💡 businesses의 외래키를 RESTRICT, CASCADE로 바꿔가며 아래를 실행해보세요.
DELETE FROM sections WHERE section_id = 1;
DELETE FROM sections WHERE section_id = 2;
UPDATE sections SET section_id = 10
WHERE section_id = 3;
UPDATE sections SET section_id = 11
WHERE section_id = 4;