2010-02-23 43 views
9
mysql> ALTER TABLE category ADD CONSTRAINT category_parent_category_id FOREIGN KEY (parent) REFERENCES category(id); 
ERROR 1005 (HY000): Can't create table 'sfnews.#sql-244_1' (errno: 150) 

DDL như sau:MySQL chính nước ngoài để cùng một bảng thất bại với lỗi 1005, errno 150

Create Table: CREATE TABLE `category` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `parent` bigint(20) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`), 
    KEY `parent_idx` (`parent`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

Tại sao nó sai?

Trả lời

11

Tự tham khảo có thể thực hiện được. Đó là bởi vì "cha mẹ" là unsigned và "id" là không. Thay đổi cột id của các định nghĩa bảng thành

`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 

và nó sẽ hoạt động.

Các reference bang về các phím nước ngoài: "Kích cỡ và dấu hiệu của các loại nguyên phải giống nhau"

Có vẻ là cùng một vấn đề được mô tả here

1

Nếu bạn kiểm tra tình trạng của động cơ InnoDB (SHOW ENGINE InnoDB STATUS), bạn sẽ nhận được một lời giải thích đầy đủ hơn:

MỚI NHẤT NƯỚC NGOÀI LỖI CHÍNH

[...]

Không thể tìm thấy chỉ mục trong bảng được tham chiếu nơi cột được tham chiếu xuất hiện dưới dạng cột đầu tiên hoặc loại cột trong bảng và bảng được tham chiếu không khớp với ràng buộc.

Làm cho id chưa được ký.

Các vấn đề liên quan