Re: Can not add foreign key constraint
Peter Brawley <[email protected]> Mon, 24 Apr 2017 13:10:28 -0500
| Newsgroups | gmane.comp.db.mysql.general |
|---|---|
| Message-ID | <[email protected]> |
On 4/24/2017 12:28, David Mehler wrote: > Hello, > > Here's the create table sand error message. > > root@localhost [(none)]> use mail; > Database changed > root@localhost [mail]> CREATE TABLE IF NOT EXISTS `lastauth` ( > -> `user` varchar(40) NOT NULL, > -> `remote_ip` varchar(18) NOT NULL, > -> `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON > UPDATE CURRENT_TIMESTAMP, > -> PRIMARY KEY (`user`), > -> FOREIGN KEY (user) REFERENCES virtual_users(user) ON DELETE CASCADE > -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; > ERROR 1215 (HY000): Cannot add foreign key constraint > > > For the table it's referencing here it is: > > CREATE TABLE `virtual_users` ( > `id` int(11) NOT NULL auto_increment, > `domain_id` int(11) NOT NULL, > `user` varchar(40) NOT NULL, > `password` varchar(32) NOT NULL, > `quota` bigint(20) NOT NULL DEFAULT 256, > `quota_messages` int(11) NOT NULL DEFAULT 0, > PRIMARY KEY (`id`), > UNIQUE KEY `user` (`user`), > FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE > ) ENGINE=InnoDB DEFAULT CHARSET=utf8; > > Hope this helps. Adding in a dummy Create Table for the missing referenced `virtual_domains`, we have ... drop table if exists lastauth, virtual_users, virtual_domains; CREATE TABLE virtual_domains ( id int PRIMARY KEY ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `user` varchar(40) NOT NULL, `password` varchar(32) NOT NULL, `quota` bigint(20) NOT NULL DEFAULT 256, `quota_messages` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY (`user`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `lastauth` ( `user` varchar(40) NOT NULL, `remote_ip` varchar(18) NOT NULL, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`user`), FOREIGN KEY (user) REFERENCES virtual_users(user) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; which executes without error. To find out what's going awry in your setup, right after the error occurs execute ... show engine innodb_status; and search the result for LATEST FOREIGN KEY ERROR. PB -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/mysql