코드/PHP

[MySql]외래키, Foreign Key 설정

Yeah-Panda 2015. 8. 3. 15:52

외래키 제한 때문에 삽질하다가 찾아낸 sql 샘플

참조 : http://www.mysqltutorial.org/mysql-on-delete-cascade/


CREATE TABLE buildings (
  building_no INT(11) NOT NULL AUTO_INCREMENT,
  building_name VARCHAR(255) NOT NULL,
  address VARCHAR(355) NOT NULL,
  PRIMARY KEY (building_no)
) ENGINE=INNODB;

CREATE TABLE rooms (
  room_no INT(11) NOT NULL AUTO_INCREMENT,
  room_name VARCHAR(255) NOT NULL,
  building_no INT(11) NOT NULL,
  PRIMARY KEY (room_no),
  KEY building_no (building_no),
  CONSTRAINT rooms_ibfk_1 
  FOREIGN KEY (building_no) 
  REFERENCES buildings (building_no) 
  ON DELETE CASCADE
) ENGINE=INNODB;

INSERT INTO buildings(building_name,address)
VALUES('ACME Headquaters','3950 North 1st Street CA 95134'),
      ('ACME Sales','5000 North 1st Street CA 95134')

INSERT INTO rooms(room_name,building_no)
VALUES('Amazon',1),
      ('War Room',1),
      ('Office of CEO',1),
      ('Marketing',2),
      ('Showroom',2);

DELETE FROM buildings WHERE building_no=2

SELECT * FROM rooms;
SELECT * FROM buildings;

-- 이미 존재하는 테이블에 외래키를 설정하는 경우
ALTER TABLE rooms ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
ON DELETE RESTRICT
ON UPDATE CASCADE


1. 카페 24의 sql server 버전이 낮았던 탓인지 테이블에 innoDB 가 적용이 안되고 있다는 오류가 계속 나는 걸 보지 못하고 혼자 삽질..아.

2. 다른 삽질 또 발견 저기서 부모 테이블 (buildings ) 의 building_no 즉 primary key 는 대부분 데이터 타입이 INT 인데

저걸 UNSIGNED 를 걸면 자식테이블 ( rooms )  에서 외래키 설정이 안된다.

저거 때문에 또 한시간 삽질했음. UNSIGNED 를 하는 이유 뭐 어엣건 했다..겨우


'코드 > PHP' 카테고리의 다른 글

[PHP]Query 결과 재사용, 인덱스 리셋  (0) 2015.08.13
[PHP] 특수한 상수들  (0) 2015.08.07
[정규표현식]IP 주소찾기  (0) 2015.07.30
port 번호 모음  (0) 2015.07.29
[MySql] 외래키.  (0) 2015.07.16