2013-12-04 4 views
0

Ошибка в моем SQL-коде, но не мог понять, где он находится. Пожалуйста, помогите мне решить это. Вот мой код:Errno: 150 в базе данных MySQL

CREATE TABLE IF NOT EXISTS Records (
record_id int(11) NOT NULL AUTO_INCREMENT, 
record_year year(4) NOT NULL, 
record_quarter int(1) NOT NULL, 
profit_tax int(11) NOT NULL, 
PRIMARY KEY (record_id, record_year, record_quarter), 
UNIQUE(record_year, record_quarter) 
); 

CREATE TABLE IF NOT EXISTS ProductsList (
product_id int(11) NOT NULL AUTO_INCREMENT, 
product_name varchar(24) NOT NULL, 
PRIMARY KEY (product_id) 
); 

ошибка в этой таблице:

CREATE TABLE IF NOT EXISTS RecordsProducts (
recordproduct_id int(11) NOT NULL AUTO_INCREMENT, 
... 
PRIMARY KEY (recordproduct_id), 
FOREIGN KEY (record_id) REFERENCES Records (record_id), 
FOREIGN KEY (product_id) REFERENCES ProductsList (record_id) 
); 
+1

Просьба показать полное определение таблицы 'RecordsProducts' и точного сообщения об ошибке. – peterm

+0

, и мы должны угадать, что у RecordProducts есть ?! –

ответ

0
  • ссылки столбец должен быть INDEX
  • ссылки столбец должен иметь тот же тип данных ссылочного столбца
  • как справочная, так и ссылочная таблица должна быть InnoDB

    CREATE TABLE IF NOT EXISTS RecordsProducts (
        ... 
        ... 
        record_id int NOT NULL, <=== check data type 
        product_id int NOT NULL, 
    
        INDEX(record_id), <===== check INDEXed or not 
        INDEX(product_id), <==== 
    
        FOREIGN KEY (record_id) REFERENCES Records (record_id), 
        FOREIGN KEY (product_id) REFERENCES ProductsList (record_id) 
    ) ENGINE = InnoDB; <=== add 'ENGINE=InnoDB' explicitly 
    
Смежные вопросы