DROP TABLE IF EXISTS testChild;
DROP TABLE IF EXISTS testParent;

CREATE TABLE testParent (
    id INT NOT NULL,
    PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;

CREATE TABLE testChild (
    id INT NOT NULL,
    parentId INT DEFAULT NULL,
    PRIMARY KEY(id),
    KEY parentId(parentId),
    CONSTRAINT testFKey FOREIGN KEY(parentId) REFERENCES testParent(id)
        ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO testParent VALUES(1);
INSERT INTO testChild VALUES(1, 1);

위와 같이 테이블을 준비한뒤에 아래 쿼리를 실행하여 testChild 테이블을 수정하면 MySQL 4.1, 5.0 에서는 오류 없이 성공하는데

ALTER TABLE testChild MODIFY parentId INT NOT NULL;

이 상태에서 아래 쿼리를 실행하게 되면,

DELETE FROM testParent WHERE id = 1;

MySQL 4.1에서는 testChild 테이블에 (1, 0) 값이 남아 외래키 제약이 깨지게 되고 MySQL 5.0에서는 crash 된다.

MySQL 5.1 이상의 버전에서는 ALTER TABLE 수행이 성공하지 못해 이런 문제를 재현할 수 없다.