데이터 무결성을 위해 필요함!
🤔데이터 무결성이란? 데이터 내의 혼란이 없고, 결함이 없는 것을 의미
기본키: 데이터를 구분 할 수 있는 식별자
ex. 회원 아이디 중복 안됨, 아이디 없이 회원가입 안됨
자동으로 클러스터형 인덱스가 생성됨
테이블당 기본키 속성은 한개만 지정할 수 있음

기본키 지정하는 SQL문
1.
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
CREATE TABLE member
( mem_id CHAR(8) NOT NULL,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL,
PRIMARY KEY (mem_id)
);
CREATE TABLE member
( mem_id CHAR(8) NOT NULL,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
ALTER TABLE member
ADD CONSTRAINT
PRIMARY KEY (mem_id);
1번을 가장 많이 사용하긴함~
두 테이블을 연결해주는 키
기준 테이블과 참조 테이블의 관계사이에 필요함
회원이 아니면 구매가 불가능 함
FK 지정하는 SQL문
1.
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
CREATE TABLE buy
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(6) NOT NULL,
FOREIGN KEY(mem_id) REFERENCES member(mem_id)
);
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
CREATE TABLE buy
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(6) NOT NULL,
FOREIGN KEY(mem_id) REFERENCES member(mem_id)
);
이런식으로 구매 테이블에서는 속성의 이름을 바꿔서 저장 시킬 수 있으나 권장하지 않음
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
CREATE TABLE buy
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(6) NOT NULL,
FOREIGN KEY(mem_id) REFERENCES member(mem_id)
);
회원이 구매한 이후, 회원 테이블의 아이디가 변경되었다면??

변경 자체가 안됨!!! -> 이로인해 데이터를 안전하게 잘 보관할 수 있음
삭제도 안됨
=> 데이터 무결성 보존
그런데도 하고 싶다면..ㅠㅠ
자동으로 양쪽 다 바꿔줘야함!
how?
ON UPDATE CASCADE
ON DELETE CASCADE
을 사용하면 됨
잘 바뀜

삭제도 잘 됨
고유키는 중복되지 않는 유일한 값이어야함
🤔기본키랑 뭐가 다르지?
기본키와 다르게 NULL값을 허용함!
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL,
email CHAR(30) NULL UNIQUE
);
입력되는 데이터 점검 기능
조건: 키는 100보다 큰 값만 입력 할 수 있음
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL CHECK (height >= 100),
phone1 CHAR(3) NULL
);
=>
INSERT INTO member VALUES('TWC', '트와이스', 99, NULL);
입력 안됨
값을 입력하지 않았을 때 자동으로 입력될 값 지정하기
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL DEFAULT 160,
phone1 CHAR(3) NULL
);
INSERT INTO member VALUES('SPC', '우주소녀', default, default);
이런식으로 입력
허용하지 않으려면 NOT NULL사용 = 반드시 입력해라!