Mam pewien problem z dodaniem klucza obcego. Mam trzy tabelki (wziąłem z SHOW CREATE TABLE):
CREATE TABLE `notifications` ( `notid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `uid` int(10) UNSIGNED NOT NULL, `type` varchar(128) COLLATE utf8_polish_ci NOT NULL, `content` varchar(1024) COLLATE utf8_polish_ci NOT NULL, PRIMARY KEY (`notid`) ) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci
CREATE TABLE `songs` ( `songid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `author` varchar(64) COLLATE utf8_polish_ci NOT NULL, `title` varchar(64) COLLATE utf8_polish_ci NOT NULL, `link` varchar(11) COLLATE utf8_polish_ci NOT NULL, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `allocation` tinyint(4) NOT NULL DEFAULT '0', `uid` int(11) NOT NULL, `status` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`songid`) ) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci
CREATE TABLE `users` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(128) COLLATE utf8_polish_ci NOT NULL, `pass` varchar(41) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL, `reg_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `rank` tinyint(4) NOT NULL DEFAULT '0', `forum_respect` smallint(6) NOT NULL DEFAULT '0', `server_respect` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`uid`), UNIQUE KEY `login` (`login`) ) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci
I teraz chciałem dodać klucz obcy do notifications, żeby przy usuwaniu użytkownika kasowało także jego powiadomienia. Robię tak:
ALTER TABLE notifications ADD FOREIGN KEY (uid) REFERENCES users(uid) ON DELETE CASCADE ON UPDATE CASCADE
i wywala:
Kod
#1005 - Can't create table 'www.#sql-135c_140' (errno: 150)
To samo jak dam:
ALTER TABLE notifications ADD CONSTRAINT fk_not_uid FOREIGN KEY (uid) REFERENCES users(uid) ON DELETE CASCADE ON UPDATE CASCADE
Próbowałem zrobić zrzut z bazy, usunąłem ją, utworzyłem ponownie, ale dalej tak samo.
Ma ktoś jakiś pomysł?