외부 키 제약 조건이 잘못 형성되어 테이블 생성이 실패함
주제
MariaDB InnoDB 외부 키 문제
저는 InnoDB에 처음 와서 어제 하루 종일 투고를 읽었습니다.지금 이 자리에 오르기 위해 여러 가지 시도를 했습니다.그래서 저는 이 어두운 숲을 빠져나갈 방법이 있을까요?
데이터 모델의 여러 테이블에 중심이 되는 테이블이 있습니다.그래서 다음과 같은 것이 있습니다.
create table users (id int not null auto_increment
, username varchar(255) NOT NULL
, password varchar(255) NOT NULL
, active int NOT NULL
, PRIMARY KEY (id))
ENGINE=InnoDB COLLATE=utf8_unicode_ci;
이번 주말에 FKs의 DELETE/UPDATE 조항을 빨리 정리하기로 결정했는데...유명한 마지막 말...
관련 테이블의 예를 다음에 나타냅니다.
create table athing (id int not null auto_increment
, name varchar(255) not null
, status varchar(255) not null
, created_by_user_id int
, PRIMARY KEY (id)
, CONSTRAINT athing_fk1 FOREIGN KEY (created_by_user_id) REFERENCES users (id)
) ENGINE=InnoDB COLLATE=utf8_unicode_ci;
문제
"ATHING" 테이블의 FK를 ON DELETE SET NULL을 포함하도록 수정했습니다. 수정 내용을 저장했습니다.HeidiSQL을 사용하여 이 작업을 수행했습니다.
간단히 말하면, 테이블 목록을 훑어보고 있었는데 USER 테이블이 없어졌어요!많은 독서와 노력을 통해 정리할 수 있었지만, 정말로 좋은 것을 확실히 할 수 있을 것 같아서 USER 테이블을 가리키는 모든 FK를 떨어뜨리고 테이블을 떨어뜨렸습니다.
USER 테이블을 다시 작성하려고 하면 다음 오류가 나타납니다.
ERROR 1005 (HY000): Can't create table `sprintdb`.`system_users` (errno: 150 "Foreign key constraint is incorrectly formed")
이 작업을 처음 시도했을 때 발견한 것은 모든 FK를 떨어뜨렸다고 생각하면서도 일부 테이블에서 해당 키를 지원하는 인덱스가 남아 있다는 것입니다.INNODB_SYS_TABLES 및 INNODB_SYS_INDEXES 테이블을 조회할 때 삭제된 인덱스가 시스템 테이블에 남아 있습니다.
파일 시스템에 있든 데이터베이스 자체에 있든 간에 정보를 갱신하거나 삭제해야 합니다.생각?
서드파티 툴을 사용하여 테이블을 작성한 후 기존 테이블에 대해 제약을 가하는 동안 이 메시지를 여러 번 받았습니다.다음 두 가지 중 하나입니다.
- 그
int
열의 크기가 다릅니다. - 그
int
열의 플래그가 다릅니다(산스 AUTO_INCREMENT).
예를 들어, 나는 어떻게 해서든 컬럼을 만들 수 있는 도구로 테이블을 만들었다.INT(10)
예상과는 달리INT(11)
그냥 선택했는데도INT
둘 다 만들었을 때, 그것은 엉망이었어요. 왜 그런지 추적하지 못했어요.
간단히 말하면, 일반적으로 가장 좋은 방법은INT
이치
이 경우는, 다음의 조작이 가능합니다.
create table users (id int(11) not null auto_increment
, username varchar(255) NOT NULL
, password varchar(255) NOT NULL
, active int NOT NULL
, PRIMARY KEY (id))
ENGINE=InnoDB COLLATE=utf8_unicode_ci;
create table athing (id int(11) not null auto_increment
, name varchar(255) not null
, status varchar(255) not null
, created_by_user_id int(11) not null
, PRIMARY KEY (id)
, CONSTRAINT athing_fk1 FOREIGN KEY (created_by_user_id) REFERENCES users (id)
) ENGINE=InnoDB COLLATE=utf8_unicode_ci;
언급URL : https://stackoverflow.com/questions/24106756/create-table-fails-with-foreign-key-constraint-is-incorrectly-formed
'source' 카테고리의 다른 글
오류 메시지 엄격한 표준: 비정적 메서드는 php에서 정적으로 호출하면 안 됩니다. (0) | 2022.09.21 |
---|---|
메이븐 설치 OSX오류 지원되지 않는major.minor 버전 51.0. (0) | 2022.09.21 |
ERROR 1045 (28000):사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다(암호: YES 사용). (0) | 2022.09.21 |
휴지 상태에서의 분리, 지속성 및 과도 물체는 무엇입니까? (0) | 2022.09.20 |
MySQL VARCHAR 크기? (0) | 2022.09.20 |