Интересно, может ли кто-нибудь мне помочь.Удалить несколько каскадных таблиц
У меня есть следующие три таблицы:
Родитель Таблица
CREATE TABLE `userdetails` (
`userid` int(6) NOT NULL auto_increment,
`forename` varchar(20) NOT NULL,
`surname` varchar(30) NOT NULL,
`emailaddress` varchar(150) NOT NULL,
`password` varchar(200) NOT NULL,
`passwordhint` varchar(20) NOT NULL,
`subscriptionexpiration` date NOT NULL,
`salt` varchar(200) NOT NULL,
PRIMARY KEY (`userid`),
UNIQUE KEY `emailaddress` (`emailaddress`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Детский стол
CREATE TABLE `detectinglocations` (
`userid` int(6) NOT NULL,
`locationid` int(6) NOT NULL auto_increment,
`locationname` varchar(80) NOT NULL,
`address` varchar(110) NOT NULL,
`osgb36lat` float(10,6) NOT NULL,
`osgb36lon` float(10,6) NOT NULL,
`osgridref` varchar(20) NOT NULL,
`wgs84latd` int(2) NOT NULL,
`wgs84latm` int(2) NOT NULL,
`wgs84lats` decimal(6,2) NOT NULL,
`wgs84latb` varchar(1) NOT NULL,
`wgs84lond` int(2) NOT NULL,
`wgs84lonm` int(2) NOT NULL,
`wgs84lons` decimal(6,2) NOT NULL,
`wgs84lonb` varchar(1) NOT NULL,
`nameoflocationcontact` varchar(30) NOT NULL,
`locationcontactsaddressline1` varchar(50) NOT NULL,
`locationcontactsaddressline2` varchar(50) default NULL,
`locationcontactsaddressline3` varchar(50) default NULL,
`locationcontactsaddressline4` varchar(50) default NULL,
`locationcontactstelephonenumber` varchar(15) default NULL,
PRIMARY KEY (`locationid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Детский стол
Используя этот код ниже, я пытаюсь реализовать функциональность «Удалить каскад», в результате чего, если пользователь удален из родительской таблицы, связанные строки в дочерних таблицах будут удалены.
ALTER TABLE 'tablename'
add CONSTRAINT fk_userdetails
FOREIGN KEY (userid)
REFERENCES userdetails(userid)
ON DELETE CASCADE
Я могу успешно реализовать это для первой таблицы ребенка, но когда я пытаюсь сделать то же самое со вторым ребенком таблицы я получаю следующее сообщение об ошибке:
#1005 - Can't create table './db369054642/#sql-30d_bd1a57.frm' (errno: 121)
я сделал довольно немного исследований, чтобы выяснить, в чем проблема, но я должен признать, что я не мудрее.
Может кто-нибудь, возможно, взглянуть на это, пожалуйста, и дайте мне знать, что я делаю неправильно?
Большое спасибо
В любом случае не нужно указывать имя ограничения. MySQL будет создавать один автоматически. Таким образом, простая «alter table X add foreign key ...» будет работать нормально. –
Так оно и есть, но удобное для чтения и понятное имя может быть предпочтительным. –
не очень. Имя ограничения имеет смысл только в том случае, если вы его отбрасываете или изменяете, и его можно легко получить из вызова show show table X. –