"katalog"라는 테이블에 외래 키를 추가하고 싶습니다.
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
이 작업을 시도하면 다음 오류 메시지가 나타납니다.
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
INNODB 상태 오류 :
120405 14:02:57 mytable 테이블의 외래 키 제약 조건에서 오류가 발생했습니다.
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL:
Cannot resolve table name close to:
(`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
이 쿼리를 사용하면 작동하지만 잘못된 "삭제시"작업이 발생합니다.
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
두 테이블 모두 InnoDB이고 두 필드 모두 "INT (11) not null"입니다. MySQL 5.1.61을 사용하고 있습니다. MacBook Pro에서 MySQL Workbench (최신)로이 ALTER Query를 실행하려고합니다.
테이블 작성 명령문 :
CREATE TABLE `katalog` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`AnzahlSeiten` int(4) unsigned NOT NULL,
`Sprache` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `katalogname_uq` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC$$
CREATE TABLE `sprache` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Bezeichnung` varchar(45) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `Bezeichnung_UNIQUE` (`Bezeichnung`),
KEY `ix_sprache_id` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
katalog
있습니다 int(11) unsigned
. sprache
이없는 usigned
, 따라서 두 개의 열이 동일하지, 부분.
auto_increment
나쁜 두 개의 열을 참조하고 있습니다 . 또한 MySQL 매뉴얼은 다음과 같이 말합니다 Corresponding columns in the foreign key and the referenced key must have similar internal data types inside InnoDB so that they can be compared without a type conversion. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.
. 따라서, 유사한 데이터 유형과 동일한 부호입니다.
SHOW CREATE TABLE
질문 만 할 수 있지만 열 이름은 실제로 ID입니까, 대문자입니까?