MySQL이 제약 조건(constraint)을 어떻게 처리하는지 자세히 살펴보겠습니다.
트랜잭션 테이블과 비트랜잭션 테이블의 차이
MySQL은 롤백(rollback)이 가능한 트랜잭션 테이블과 롤백이 불가능한 비트랜잭션 테이블을 모두 지원합니다. 바로 이러한 특성 때문에 MySQL은 다른 DBMS와 달리 제약 조건을 처리하는 방식에 차이가 있습니다.
비트랜잭션 데이터베이스에서는 여러 행을 삽입하거나 수정하는 도중 오류가 발생하더라도 해당 작업을 되돌릴 수 없습니다. 따라서 이런 상황을 사전에 적절하게 처리하는 것이 매우 중요합니다.
오류 감지 및 복구 방식
MySQL 서버는 실행할 문장(statement)을 파싱하는 단계에서 오류로 판단되는 쿼리에 대해 오류를 발생시킵니다. 오류가 감지되면 서버는 문장을 실행하는 과정에서 오류로부터 복구를 시도하지만, 현재까지 모든 문장 유형에 이 기능이 적용되는 것은 아닙니다.
오류가 발생했을 때 MySQL은 해당 문장을 중간에 중단하거나, 오류에서 복구한 뒤 작업을 계속 진행할 수 있습니다. 기본 설정에서는 서버가 오류를 스스로 복구하고 나머지 작업을 계속 수행합니다.
외래 키(Foreign Key) 제약 조건
외래 키는 여러 테이블에 걸쳐 있는 데이터를 상호 참조할 수 있도록 해주며, 외래 키 제약 조건은 이렇게 분산된 데이터의 일관성을 유지하는 핵심 역할을 합니다.
외래 키 참조
MySQL은 CREATE TABLE과 ALTER TABLE 문에서 ON UPDATE 및 ON DELETE 외래 키 참조 옵션을 지원합니다.
참조 동작(Referential Actions)
사용할 수 있는 참조 동작에는 RESTRICT, CASCADE, SET NULL, NO ACTION이 있습니다. 이 중 NO ACTION이 기본 참조 동작으로 설정되어 있습니다.
ENUM 타입의 제약 조건
ENUM 값은 반드시 컬럼 정의에 명시된 값 또는 그에 대응하는 내부 숫자 값이어야 하며, 오류 값을 의미하는 0이나 빈 문자열('')은 허용되지 않습니다.
예를 들어 ENUM('a','b','c')로 정의된 컬럼에 'a', 'b', 'c' 이외의 값('', 'd', 'ax' 등)을 입력하면 유효하지 않은 값으로 판단되어 거부됩니다.