테이블에서 여러 행을 삭제하려고하는데 데이터베이스 관계 때문에 그 행 중 하나를 삭제할 수없는 경우 어떻게됩니까?mysql 삭제 및 데이터베이스 관계
관계에 의해 제한되지 않는 행은 계속 삭제됩니까? 아니면 전체 삭제가 실패합니까?
테이블에서 여러 행을 삭제하려고하는데 데이터베이스 관계 때문에 그 행 중 하나를 삭제할 수없는 경우 어떻게됩니까?mysql 삭제 및 데이터베이스 관계
관계에 의해 제한되지 않는 행은 계속 삭제됩니까? 아니면 전체 삭제가 실패합니까?
단일 삭제 명령문 인 경우 전체 삭제가 실패합니다.
MySQL에서 외래 키 제약 조건을 설정하면 존재하지 않는 ID를 삽입하거나 기존 ID를 삭제하려고하면 쿼리가 실패합니다.
즉, 삭제가 실패합니다.
모든 행이 삭제됩니다. 그러나 프로그램이 관련 행을 삭제하는지 확인해야합니다. 그렇지 않으면 게시물/레코드/누락 된 항목이 누락됩니다.
이 여기보다 일반적인 질문 :
대답은 본질적으로 "이미 영향을받은 사람이 아니며 이미 성공한 사람도 있습니다"입니다.
내부적으로 일어나는 일은 다소 복잡합니다. InnoDB는 트랜잭션 세이브 포인트를 지원하며 데이터베이스는 현재 트랜잭션 내에서 명령문 시작 부분에 암시 적 세이브 포인트를 작성합니다. 명령문이 부분적으로 실패하면 암시 적 세이브 포인트로 롤백이 다시 발생합니다. 이것은 성명서가없는 것처럼 보인다는 것을 의미합니다 (READ_UNCOMMITTED 격리 수준을 사용하는 사람들을 제외하고는 상관하지 않습니다).
명시 적 트랜잭션을 사용하는지 여부에 관계없이 이러한 상황이 발생합니다. 명시 적 트랜잭션을 사용하는 경우 현재 트랜잭션은 롤백되지 않습니다 (데드락 및 잠금 대기 제한 시간과 같은 특정 유형의 오류 제외). 대신 교착 상태가 끊어 지도록 허용해야합니다. 진술의 시작.
이 테이블을 2 개의 더미 테이블로 아주 빨리 테스트 할 수 있습니다 ... –