Cześć!
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ł?