ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL) PRIMARY KEY, FOREIGN KEY
    SQL 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

    댓글

binlog