10.4.24-MariaDB - 외부 키 구속조건이 잘못 형성됨
인person_addresses
테이블 오류가 발생하고 있습니다.Foreign key constraint is incorrectly formed
내 버전은10.4.24-MariaDB
CREATE TABLE persons (
person_id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
email varchar(50) DEFAULT NULL,
phone int(11) DEFAULT NULL,
bio text DEFAULT NULL,
dob date DEFAULT NULL,
gender enum('Male','Female','Other') NOT NULL,
status tinyint(4) NOT NULL,
created_at timestamp NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (person_id),
UNIQUE KEY email (email),
UNIQUE KEY phone (phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE person_addresses (
person_id int(11) NOT NULL ,
address text NOT NULL,
created_at timestamp NOT NULL DEFAULT current_timestamp(),
UNIQUE KEY uc_person_address (person_id,address),
CONSTRAINT fk_person FOREIGN KEY (person_id) REFERENCES persons(person_id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
더 자세한 오류
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2023-01-11 12:41:52 0x421c Error in foreign key constraint of table `test`.`person_addresses`:
There is no index in table ```test``.``person_addresses``` where the columns appear
as the first columns. Constraint:
FOREIGN KEY (person_id) REFERENCES persons (person_id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
Please refer to https://mariadb.com/kb/en/library/foreign-keys/ for correct foreign key definition.Create table `test`.`person_addresses` with foreign key constraint failed. There is no index in the referenced table where the referenced columns appear as the first columns near ' FOREIGN KEY (person_id) REFERENCES persons (person_id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4'.
MariaDB: https://jira.mariadb.org/browse/MDEV-29717 에서 일치하는 버그 보고서를 찾은 것 같습니다.
문제는 외부 키에 필요한 인덱스가 매우 크면 인덱스가 자동으로 생성된다는 것입니다.그러나 해당 인덱스가 스토리지 엔진의 인덱스 크기 제한보다 클 경우(사용 중인 MariaDB 버전에서는 기본적으로 innodb_large_message=on인 DYNAMIC 행 형식이므로 3072바이트여야 함) 실패합니다.그text
인덱스의 유형이 너무 커서 인덱스 접두사를 정의하지 않고 인덱싱할 수 없습니다.그러나 외부 키는 인덱스 접두사로 정의된 인덱스를 사용할 수 없습니다.
안타깝게도 외부 키는 스토리지 엔진 깊숙한 곳에서 구현되기 때문에 더 많은 정보를 제공하는 오류 메시지가 나타날 기회가 거의 없습니다.이 문제는 플러그형 스토리지 엔진 구현과 관련된 문제입니다.
당신의 경우의 해결책은 다음과 같은 것을 바꾸는 것이어야 합니다.address
열 유형.그럴 리 없다.text
그것은 오직 a일 수 있습니다.varchar
인덱스 접두사 길이 제한에 대해 너무 길지 않습니다.
예를 들어 MariaDB 10.4를 사용하여 테스트했습니다.https://dbfiddle.uk/5jTX8iFt 다음과 같은 경우 실패합니다.address
이라text
그리고 그것은 잘 작동하면 됩니다.address
이라varchar(255)
다른 길이는 테스트하지 않았습니다, 그것은 당신에게 맡기겠습니다.
당신이 필요할 것 같지는 않습니다.text
어쨌든 주소는.64KB가 필요한 주소를 가진 사람이 있습니까?
언급URL : https://stackoverflow.com/questions/75079218/10-4-24-mariadb-foreign-key-constraint-is-incorrectly-formed
'source' 카테고리의 다른 글
0이 아닌 비트를 양의 정수로 빠르게 카운트하는 방법 (0) | 2023.06.15 |
---|---|
R에 로드된 패키지 버전을 확인하는 방법은 무엇입니까? (0) | 2023.06.15 |
SQL을 사용하여 테이블의 열 수를 계산하는 방법은 무엇입니까? (0) | 2023.06.15 |
Vuex: 상수 대신 돌연변이/작용의 함수 이름을 사용할 수 있습니까? (0) | 2023.06.15 |
두 오라클 인스턴스 간에 DB 링크를 만드는 방법 (0) | 2023.06.15 |