source

외부 키 제약 조건이 잘못 형성되어 테이블 생성이 실패함

factcode 2022. 9. 21. 23:22
반응형

외부 키 제약 조건이 잘못 형성되어 테이블 생성이 실패함

주제

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

반응형