쌓고 쌓다
[SQL] 기준 테이블과 참조 테이블의 데이터 변경 본문
기준 테이블의 열이 변경될 경우
INSERT INTO member VALUES('BLK', '블랙핑크', 163);
INSERT INTO buy VALUES(NULL, 'BLK', '지갑');
INSERT INTO buy VALUES(NULL, 'BLK', '맥북');
member 테이블이 기준 테이블이며, buy 테이블은 참조 테이블이다.
내부 조인을 이용해 INSERT 결과 확인
SELECT M.mem_id, M.mem_name, B.prod_name
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
이 상태에서 기준 테이블 member에 있는 회원 아이디 'BLK'를 'PINK'로 바꿔보자.
UPDATE member SET mem_id = 'PINK' WHERE mem_id='BLK';
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails
(`naver_db`.`buy`, CONSTRAINT `buy_ibfk_1` FOREIGN KEY (`mem_id`) REFERENCES `member` (`mem_id`))
기본 키- 외래 키로 맺어진 후에는 기준 테이블의 열 이름은 변경되지 않는다.
열 이름이 변경되면 참조 테이블의 데이터에 문제가 발생하기 때문이다.
물론, 삭제 또한 안된다.
DELETE FROM member WHERE mem_id='BLK';
+ 참조 테이블에 영향을 안주는 기준 테이블의 열 이름의 변경은 가능 ( 참조 테이블에 존재하지 않아도 기준T 변경가능 )
UPDATE member SET mem_name = '블랙핑크크' WHERE mem_id='BLK';
기준 테이블의 열 이름이 변경될때 참조 테이블의 열 이름 자동 변경
ON UPDATE CASCADE문을 이용한다. 또한 삭제시 반영되게하는것은 ON DELETE CACADE문이다.
CREATE TABLE buy
(
num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(6) NOT NULL
);
ALTER TABLE buy
ADD CONSTRAINT
FOREIGN KEY(mem_id) REFERENCES member(mem_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
다시 기준 테이블의 내용을 변경을 해보겠다.
UPDATE member SET mem_id='PINK' WHERE mem_id='BLK';
참조 테이블 또한 함께 변경이 되었다.
또한 다시 기준 테이블에 데이터를 삭제해보겠다.
DELETE FROM member WHERE mem_id='PINK';
그리고 참조 테이블의 모든 항목들을 검색해보겠다.
SELECT * FROM buy;
기준 테이블의 데이터를 지웠더니 참조 테이블에 같이 묶인 데이터도 함께 삭제되었다.
모든 내용은 '혼자 공부하는 SQL' 도서를 기반으로 학습 후 정리한 내용입니다.
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 뷰(View) (0) | 2022.07.20 |
---|---|
[SQL] 고유 키(Unique), 체크(Check), 기본값(Default) 제약조건 (0) | 2022.07.19 |
[SQL] 기본 키(Primary Key), 외래 키(Foreign Key) 설정 (0) | 2022.07.17 |
[SQL] SQL로 테이블 만들기 (0) | 2022.07.10 |
[SQL] SQL 프로그래밍 ( IF, CASE, WHILE ) (0) | 2022.07.05 |
Comments