외래키 제한 때문에 삽질하다가 찾아낸 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 |