MySQL 8.x의 주요 버그 -- 외부 키
MySQL(코드 생성기용)에서 외부 키 정보를 가져오던 중 이 이상한 동작을 발견했습니다.MySQL 8.x의 주요 버그처럼 보입니다.다음을 사용하여 외부 키를 만들 때REFERENCES
엔진이 강제하지 않습니다.예를 들어 다음과 같습니다.
create table p (
id int primary key not null
) engine=innodb;
create table q (
pid int references p (id)
) engine=innodb;
insert into q (pid) values (123); -- succeeds (!)
단, 외부 키 입력 생성 시FOREIGN KEY (col) REFERENCES table (col)
정상적으로 동작합니다.
create table p (
id int primary key not null
) engine=innodb;
create table r (
pid int,
foreign key (pid) references p (id)
) engine=innodb;
insert into r (pid) values (456); -- fails, as expected
이것이 MySQL의 진정한 메이저 버그인 경우 잘못된 구문을 비활성화할 수 있는 방법이 있습니까?
주의: MariaDB가 10.4까지 같은 버그를 나타낸 것을 확인했는데, 10.5로 해결된 것 같습니다.
MySQL에서는 수정되지 않았습니다.합법적인 SQL 구문을 허용하지만 MySQL은 열 수준의 외래 키 구문을 사용할 때 제약 조건을 저장하지 않습니다.
이것은 2005년에 버그로 보고되어 「수정할 수 없습니다」라고 하는 메세지로 종료되었습니다.
https://bugs.mysql.com/bug.php?id=13301
https://dev.mysql.com/doc/refman/8.0/en/ansi-diff-foreign-keys.html은 다음과 같이 기술하고 있습니다.
MySQL은 참조가 열 사양의 일부로 정의되어 있는 "인라인 REFERENCE 사양"을 구문 분석하지만 무시합니다.MySQL은 별도의 FORENAL KEY 사양의 일부로 지정된 경우에만 REFERENCE 절을 받아들입니다.MyISAM과 같은 외부 키를 지원하지 않는 스토리지 엔진의 경우 MySQL Server는 외부 키 사양을 해석하고 무시합니다.
지원되지 않는 구문을 디세블로 하거나 오류 또는 경고를 반환할 수 없습니다.
언급URL : https://stackoverflow.com/questions/63727924/major-bug-in-mysql-8-x-foreign-keys
'programing' 카테고리의 다른 글
python: 변수가 배열인지 스칼라인지 식별하는 방법 (0) | 2022.09.11 |
---|---|
파일에서 특정 행(행 번호별)을 읽는 방법 (0) | 2022.09.11 |
Java의 3차 연산자는 Java 7 이후 하나의 표현식만 평가합니다. Java 1.6 이하에서는 다른가요? (0) | 2022.09.11 |
MariaDB 10.3에서 특정 사용자에 대한 외부 액세스 허용 (0) | 2022.09.11 |
"Type List 표현식에 선택되지 않은 변환 필요..."를 수정하려면 어떻게 해야 합니까? (0) | 2022.09.11 |