errno: 121
1) 운영 체제
cat/etc/issue cat/etc/issue CentOS release 6.6 (Final) Kernel\r on an\m
cat/proc/version cat/proc/version Linux version 2.6.32-504.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014
2) mysql 데이터베이스 버전
mysql --version mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
2. 문제 설명
2.1 문제점 발견
오늘 다음 오류를 보고하는 mysql 라이브러리 아래에 테이블을 만듭니다.
ERROR 1005 (HY000): Can't create table 'log.test6' (errno: 121)
건표문은 다음과 같다.CREATE TABLE `test6` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`user_id` int(11) NOT NULL,
CONSTRAINT `FK_TEST_ID` FOREIGN KEY (`id`) REFERENCES `test3` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3. 문제 분석
3.1 상부의 오보를 통해 우리는 어떤 원인이 건표문구의 오보를 초래했는지 알 수 없다.운영 체제에서 perror를 사용하여 121 오류 코드에 대한 정보를 확인할 수 있습니다.
perror 121
OS error code 121: Remote I/O error
MySQL error code 121: Duplicate key on write or update
상단perror121에서 출력한 정보(Duplicate key)를 통해 우리는 문제의 원인을 대충 판단할 수 있다.외부 키 이름 (대소문자를 구분하지 않음) 이 중복되어 발생한 것이어야 한다. (우리가 지정한 색인 이름은 중복될 수 있기 때문이다.)3.2 우리의 판단을 검증한다
1) 테스트 3 테이블 만들기
CREATE TABLE test3 (
id int(11) DEFAULT NULL,
name varchar(20) DEFAULT '0',
KEY (id)) engine=innodb;
2)test4표 만들기(외키 제약 만들기)CREATE TABLE `test4` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`user_id` int(11) NOT NULL,
CONSTRAINT `FK_TEST_ID` FOREIGN KEY (`id`) REFERENCES `test3` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3)test5 테이블을 만들고 겹쳐쓰기 FKTEST_ID CREATE TABLE `test5` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`user_id` int(11) NOT NULL,
CONSTRAINT `FK_TEST_ID` FOREIGN KEY (`id`) REFERENCES `test3` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ERROR 1005 (HY000): Can't create table 'log.test5' (errno: 121)
4) 테이블 작성 후 외부 키 추가CREATE TABLE `test5` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`user_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
alter table test5 add constraint FK_TEST_ID foreign key(id) REFERENCES test3(id);
ERROR 1005 (HY000): Can't create table 'log.#sql-2a43_e91' (errno: 121)
위에는 5.1.73에 실린 오타가 있는데 같은 장면은 5.6에 실린 오타가 다음과 같다.
alter 외부 키를 추가하는 중 이름이 잘못되었습니다. 아래와 같습니다.
ERROR 1022 (23000): Can't write; duplicate key in table '#sql-1106_10'
create가 테이블을 만들 때 지정한 외부 키가 겹치면 다음과 같이 오류가 발생합니다.ERROR 1022 (23000): Can't write; duplicate key in table 'test6'
##5.6의 오타가 5.1의 오타보다 읽기 쉽다는 것을 알 수 있다.위의 테스트는 우리의 판단을 검증했다.(innodb표에만 적용되며, 외부 키로 적용되는 열은 색인을 만들어야 합니다.)
참조된 외부 키 열에 색인이 없으면 외부 키를 만들 때 5.1과 5.6에 각각 다음과 같은 오류가 표시됩니다.
5.1 다음과 같은 오류 보고
ERROR 1005 (HY000): Can't create table 'test.test4' (errno: 150)
5.6 다음과 같은 오류를 보고한다.
ERROR 1215 (HY000): Cannot add foreign key constraint
4. 솔루션
다른 키 이름을 지정합니다. (대소문자를 구분하지 않으면 abc와 ABC가 중복된 것으로 간주됩니다.)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vuetify에서 행 그룹화이 기사에서는 유사한 값으로 테이블의 행을 그룹화하는 방법에 대한 경험을 공유하고자 합니다. 물론 기본 그룹화 예제를 찾을 수 있지만 제 사용 사례에는 약간의 고급 기능이 필요했습니다. 제품 데이터가 있다고 가정합니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.