-
DELETE 는 테이블 내의 레코드를 삭제할 때 사용하는 명령어입니다.학생에 관한 정보를 모아둔 위와 같은 테이블이 있다고 할 때, DELETE 를 활용하면 조건에 따라 개별 학생의 정보가 담긴 row 를 하나씩 지우거나, 혹은 테이블 내의 모든 row 를 지우는 것이 가능합니다.하지만 여러 개의 테이블이 foreign key 로 묶여있을 경우에는 상황이 조금 다릅니다. 서로가 연결되어 있기 때문에 어느 하나를 지워서는 정보가 꼬이는 상황이 발생할 수 있죠.MySQL 에서는 만약 어떤 테이블의 row 의 정보가 다른 테이블과 foreign key 로 묶여있을 때 DELETE 명령어를 사용해 row 를 삭제하려고 하면,ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails 와 같은 에러 메시지를 보여주며 DELELTE 처리를 거부합니다.에러 메시지를 살펴보면 parent row 라는 표현을 확인할 수 있습니다.foreign key 로 묶일 때 부모와 자식의 관계가 성립하기 때문인데요.primary key 값을 foreign key 로 전달하는 쪽이 '부모', foreign key 를 받아오는 쪽이 '자식' 이라고 할 수 있습니다. 부모 쪽의 row 를 먼저 지울 수는 없지만 자식 쪽의 row 를 지우는 것은 가능합니다.연결된 자식 데이터를 전부 지우고 나면 부모 쪽의 데이터를 지우는 것이 가능합니다.
create table employee_new2 (select * from employee);
create table payment_new2 (select * from payment);
select * from employee_new2;
select * from payment_new2;
-- 1. PK 추가 하는 방법
alter table employee_new2 add constraint emp_id primary key(emp_id);
desc employee_new2;
-- 2. delete cascade 먼저 걸려 있으면 다 삭제 (반드시)
-- ON DELETE CASCADE 이미 존재하면 더 추가 할 수 없다.
alter table payment_new2
add constraint foreign key(emp_id)
references employee_new2(emp_id)
on DELETE cascade on UPDATE cascade;
select * from employee_new2;
select * from payment_new2;
update employee_new2 set emp_id = 2002 where emp_id = 102;
/**
신규 생성시 UPDATE, DELETE 한번에 추가 하는 방법
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB;
*/
'개발일지 > Database' 카테고리의 다른 글
블로그 DB 시나리오 (0) | 2022.10.19 |
---|---|
CRUD - (JDBC) (0) | 2022.10.18 |
Class for Class (0) | 2022.10.18 |
JAVA와 MySQL(DB) 연결하기 (0) | 2022.10.18 |
BETWEEN 사용법 (0) | 2022.10.13 |
댓글