MySQL 5.1.59 ném một lỗi lỗi với tạo bảng này:Có gì sai với Ngoại chính Hạn chế trong bảng này
CREATE TABLE IF NOT EXISTS `genre` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`abv` CHAR(3) CHARACTER SET 'latin1' COLLATE 'latin1_bin' NULL DEFAULT NULL ,
`name` VARCHAR(80) NOT NULL DEFAULT '' ,
`parent_id` INT NULL DEFAULT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_genre_genre1` (`parent_id` ASC) ,
CONSTRAINT `fk_genre_genre1`
FOREIGN KEY (`parent_id`)
REFERENCES `genre` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE)
ENGINE = InnoDB;
nào được tạo ra bởi MySQLWorkbench 5.2.33.
Các thông báo lỗi là:
ERROR 1005 (HY000) at line __: Can't create table 'mydb.genre' (errno: 150)
Có gì sai với tạo bảng này?
Nếu MySQL báo cáo một số lỗi 1005 từ một câu lệnh CREATE TABLE, và thông báo lỗi liên quan đến lỗi 150, tạo bảng thất bại vì một ràng buộc khoá ngoại đã không được hình thành một cách chính xác.
Nó cũng nói rằng tài liệu tham khảo nước ngoài chìa khóa dẫn đến cùng một bảng được phép:
InnoDB hỗ trợ tài liệu tham khảo nước ngoài chủ chốt trong một bảng. Trong những trường hợp này, “bản ghi bảng con” thực sự đề cập đến các hồ sơ phụ thuộc trong số cùng một bảng.
Mối quan hệ tôi muốn là một phụ huynh không xác định để đại diện cho phân cấp thể loại và thể loại phụ. Một thể loại không cần phải có một phụ huynh, do đó parent_id là nullable.
Nó có thể có liên quan mà MySQLWorkbench thiết lập như sau:
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';
'SHOW ENGINE InnoDB STATUS' ngay sau khi nhận được lỗi đó. Nó sẽ cung cấp cho bạn thông báo lỗi thực sự, bình thường. – derobert
+1 Đối với câu hỏi được thiết kế độc đáo với tất cả thông tin liên quan. – Johan
Đó là mẹo hữu ích, derobert, cảm ơn! –