-
SQL) PRIMARY KEY, FOREIGN KEYSQL 2023. 3. 21. 01:29
PRIMARY KEY (기본키)
- 테이블의 각 레코드 식별
- 중복되지 않은 고유값 포함
- NULL 값을 포함할 수 없음
- 테이블당 하나의 기본키 가짐CREATE TABLE tablename ( column1 datatype NOT NULL, column2 datatype NOT NULL, ... (CONSTRAINT constraint_name) PRIMARY KEY (column1, column2, ...) );ALTER TABLE tablename ADD (CONSTRAINT) PRIMARY KEY(column1, column2, ...)alter table tablename drop primary key;FOREIGN KEY (외래키)
한 테이블을 다른 테이블과 연결해주는 역할
참조되는 테이블의 항목은 그 테이블의 기본키( or 단일값)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) );ALTER TABLE tablename ADD FOREIGN KEY(column) REFERENCES REF_tablename(REF_column);alter table tablename drop foreign key constraint_name;💥 (constraint 생략한 경우) 자동생성된 constraint 확인하는 방법
SHOW CREATE TABLE tablename;
🔔 police_station 과 crime_status 테이블 사이에 관계 (Foreign Key)를 설정
1. 표시 형식 맞추기
select c.police_station, p.name from crime_status c, police_name p where p.name like concat('서울', c.police_station,'경찰서') group by c.police_station, p.name;2. police_station.name 을 Primary Key 로 설정
alter table police_station add primary key(name);3. crime_status 테이블에 Foreign Key 로 사용할 Column 추가
alter table crime_status add column reference varchar(16);4. Foreign Key 생성
alter table crime_status add foreign key(reference) references police_station(name);💥 ERROR 3780[HY000] 발생한다면 show full columns from dbname 으로 각 컬럼 type, collation 맞춰주기
(alter table police_station modify col_name datatype character set collation_name;)
5. Foreign Key 값 Update
update police_station p, crime_status c set c.reference = p.name where p.name like concat('서울', c.police_station, '경찰서');'SQL' 카테고리의 다른 글
SQL) Scalar Functions (0) 2023.03.21 SQL) 집계함수(Aggregate Functions) (0) 2023.03.21 SQL) Python with MySQL/CSV (0) 2023.03.20 SQL) RDS 접속, SQL FILE 실행, 백업 (0) 2023.03.17 SQL) CONCAT, ALIAS, DISTINCT, LIMIT (0) 2023.03.16