Tôi muốn thêm Khóa ngoài vào bảng có tên là "katalog".
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Khi tôi cố gắng làm điều này, tôi nhận được thông báo lỗi này:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Lỗi trong Trạng thái INNODB:
120405 14:02:57 Lỗi trong ràng buộc khóa ngoài của bảng mytable. # Sll-7fb1_7d3a:
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
Khi tôi sử dụng truy vấn này, nó hoạt động, nhưng với hành động "xóa" sai:
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Cả hai bảng là InnoDB và cả hai trường là "INT (11) không null". Tôi đang sử dụng MySQL 5.1.61. Đang cố gắng thực hiện Truy vấn ALTER này với MySQL Workbench (mới nhất) trên MacBook Pro.
Bảng tạo báo cáo:
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
có int(11) unsigned
. sprache
không có usigned
phần, do đó hai cột không giống nhau.
auto_increment
cột không tốt. Ngoài ra, hướng dẫn sử dụng MySQL nói : 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.
. Do đó, có, loại dữ liệu tương tự và cùng một dấu hiệu.
SHOW CREATE TABLE
, tôi chỉ có thể hỏi - tên cột có thực sự là ID không, có phải là chữ hoa không?