mairadb

admin_money 테이블 (외래키 설정 할 테이블)

 

reserve_inform (기본 테이블 )

 

reserve_inform 테이블에 reserve_num 을 admin_money 테이블의 reserve_num의 외래키로 설정하려던 중 에러가 났다.

열심히 구글링을 했는데 확인해 볼 부분이 있어 확인해보았다

 

1. 키 설정 확인하기 

 

참조할 테이블안에 필드의 키 값이 메인키(PK)나 유니크 키 인지 확인해봤다. 

reserve_num은  키 설정이 되있지 않았다. 

확인 결과 : 문제 없음 

 

 

 

 

 

2. CHARSET확인하기

 

reserve_inform 테이블

 

admin_money 테이블

둘 다 같은 설정으로 확인되었다.

확인 결과 : 문제 없음

 

 

 

 

 

3. 데이터 타입 확인하기

 

데이터 타입도 둘 다 int(11)로 되있기에 당연히 문제가 없다.

고 생각했는데...

 

reserve_inform 테이블

참조할 테이블에 있는 필드에 unsigned가 체크 되어있었다. 

나는 사실 저게 뭔지 몰랐다.

(테이블을 생성할 때 직접 쿼리를 짠게 아니라 erd 만드는 프로그램에서 테이블을 만들고 쿼리를 가져왔다.)

 

 

unsigned : mariadb에서 사용할 때 데이터 형식에 양수의 값만 저장할 수 있게 하는 데이터 형식

int의 범위는 -2,147,483,648 ~ 2,147,483,647로 42억개이며 4바이트 공간을 차지하는데

unsigned 형식을 쓰면 음수를 사용하지 않기에 -21억 공간을 양수로 사용해 0 ~ 4,294,967,295으로 사용할 수 있는 것이다. 

주로 Auto_increment 설정시 사용한다고 한다.

 

테이블 생성시 reserve_num이 auto_increment 를 사용하기에 자동으로 체크를 한 것 같다.

 

 

 

체크를 해제하고 다시 외래키를 설정했더니

alter table admin_money add constraint fk_reserve_num foreign key reserve_num REFERENCES reserve_inform(reserve_num);

잘 설정 되었다. 

 

 

 

+ Recent posts