MySQL

MySQL의 foreign keys 설정하기

HooSL 2021. 12. 13. 18:04

예제

customers 테이블 세팅

order 테이블 세팅

insert into customers (first_name, last_name, email)
values ('Boy', 'George', 'george@gmail.com'),
	('George', 'Michael', 'gm@gmail.com'),
    ('David', 'Bowie', 'david@gmail.com'),
    ('Blue', 'Steele', 'blue@gmail.com'),
    ('Bette', 'Davis', 'bette@aol.com');
insert into orders (order_date, amount, customer_id)
values ('2016/02/10', 99.99, 1),
		('2017/11/11', 35.50, 1),
        ('2014/12/12', 800.67, 2),
        ('2015/01/03', 12.50, 2),
        ('1999/04/11', 450.25, 5);

지금 입력한 데이터가 고객데이터입니다.

하지만 foreign keys를 설정하지 않고 ordes 테이블에 데이터를 insert into 를 하게 되면 유령회원이 생기게 됩니다.

(주인 없는 customer 또는 orders가 생기게 됩니다.)

그래서 orders의 customer_id 컬럼과 customer의 id를 연결해줍니다.

create table orders(
	id int auto_increment primary key,
    order_date date,
    amount decimal(8,2),
    customer_id int unsigned,
    foreign key(customer_id) references customers(id) -- foreign key설정
);

workbench로 설정하기

먼저 연결할 테이블 alter table에 들어갑니다.

unsigned는 꼭 체크가 되어있어야합니다(customer의 id가 프라이머리 key로써 unsigned가 체크되어있기 때문)

 

이렇게 order의 customer_id와 customer의 id를 묶어줍니다.

select *
from customers,orders
where customers.id = orders.customer_id;

두 테이블을 where문으로 order의 customer_id와 customer의 id가 같다고 설정해주고 출력하면 중복이나

유령회원 데이터 없이 나옵니다.