2013-08-22 47 views
11

Tôi muốn tạo tham chiếu đến bảng nước ngoài. nhưng tôi nhận được lỗi sau:Không thể phân giải tên bảng gần

truy vấn:

CREATE TABLE category_ids (id INT, post_id INT, 
        INDEX par_ind (post_id), 
        FOREIGN KEY (post_id) REFERENCES post(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB; 

HIỂN THỊ ENGINE InnoDB TÌNH TRẠNG \ G:

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
2013-08-23 00:11:06 7f6f49e7b700 Error in foreign key constraint of table fun/category_ids: 
FOREIGN KEY (post_id) REFERENCES post(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB: 
Cannot resolve table name close to: 
(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB 
cấu trúc

viết bảng

mysql> describe post; 
    +-------------+-----------------------+------+-----+---------------------+----------------+ 
    | Field  | Type     | Null | Key | Default    | Extra   | 
    +-------------+-----------------------+------+-----+---------------------+----------------+ 
    | id   | int(11)    | NO | PRI | NULL    | auto_increment | 
... 
    +-------------+-----------------------+------+-----+---------------------+----------------+ 
    22 rows in set (0.00 sec) 
+0

Có thể nó cho rằng "post" là một từ dành riêng, nếu bạn đủ điều kiện đăng bài trong khóa ngoại của bạn với các dấu tích sau (tức là \ 'post \ '(id)). –

+0

Bạn có cách nào để kiểm tra xem bảng của mình có đang sử dụng INNODB đúng cách và không phải cái gì khác không? (Ngay cả khi bạn đã viết rõ ràng, có) – Sugar

+0

Bạn có thể sử dụng 'SHOW CREATE TABLE' để kiểm tra công cụ được sử dụng cho bảng được tham chiếu. – deltab

Trả lời

33

Chỉ InnoDB hỗ trợ nước ngoài các phím, MyISAM thì không. Thậm chí nếu có, bạn không thể tạo mối quan hệ giữa các bảng thuộc loại khác nhau.

Vì vậy, bạn cần chuyển đổi bảng post thành InnoDB. ALTER TABLE post ENGINE = InnoDB;

+0

Tôi cần MyISAM cho chỉ số toàn văn :( – user2696962

+0

Bạn không thể có bánh của bạn và ăn nó quá;) –

+3

Phiên bản mới của mysql có 'chỉ số FULLTEXT' cho 'InnoDB' – Antoniossss

0

Để tôi làm việc với điều này.

CREATE TABLE category_ids (id INT, post_id INT references post(id), 
       INDEX par_ind (post_id) 
) ENGINE=INNODB; 
0

Lỗi này cũng có thể xảy ra khi bảng cha được phân đoạn. Việc loại bỏ phân vùng từ bảng cha cho phép tạo ra ràng buộc nước ngoài mà không có bất kỳ vấn đề nào.

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