У меня немного странная проблема. Я пытаюсь добавить внешний ключ в одну таблицу, которая ссылается на другую, но по какой-то причине он не работает. Из-за моего ограниченного знания MySQL, единственное, что может быть подозрительным, это то, что в другой таблице есть внешний ключ, ссылающийся на тот, на который я пытаюсь ссылаться.
Я выполнил запрос SHOW CREATE TABLE
для обеих таблиц, sourcecodes_tags
- это таблица с внешним ключом, sourcecodes
- это ссылочная таблица.
CREATE TABLE 'sourcecodes' (
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'user_id' int(11) unsigned NOT NULL,
'language_id' int(11) unsigned NOT NULL,
'category_id' int(11) unsigned NOT NULL,
'title' varchar(40) CHARACTER SET utf8 NOT NULL,
'description' text CHARACTER SET utf8 NOT NULL,
'views' int(11) unsigned NOT NULL,
'downloads' int(11) unsigned NOT NULL,
'time_posted' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ('id'),
KEY 'user_id' ('user_id'),
KEY 'language_id' ('language_id'),
KEY 'category_id' ('category_id'),
CONSTRAINT 'sourcecodes_ibfk_3' FOREIGN KEY ('language_id') REFERENCES 'languages' ('id') ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT 'sourcecodes_ibfk_1' FOREIGN KEY ('user_id') REFERENCES 'users' ('id') ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT 'sourcecodes_ibfk_2' FOREIGN KEY ('category_id') REFERENCES 'categories' ('id') ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
CREATE TABLE 'sourcecodes_tags' (
'sourcecode_id' int(11) unsigned NOT NULL,
'tag_id' int(11) unsigned NOT NULL,
KEY 'sourcecode_id' ('sourcecode_id'),
KEY 'tag_id' ('tag_id'),
CONSTRAINT 'sourcecodes_tags_ibfk_1' FOREIGN KEY ('tag_id') REFERENCES 'tags' ('id') ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Это код, который генерирует ошибку:
ALTER TABLE sourcecodes_tags ADD FOREIGN KEY (sourcecode_id) REFERENCES sourcecodes (id) ON DELETE CASCADE ON UPDATE CASCADE