好吧,就像这样。我在phpmyadmin有两张桌子。一个是个人信息,另一个是登录信息。这两个表都有AccountID,所以我尝试使用外键约束来连接这些表。这样做之后,我似乎无法用新的数据更新表。在约束之前,更新表很好。
我想要做的是将用户登录信息和个人信息存储在这些表中。然后,每当用户想要删除其经常帐户时,都会从两个表中删除其个人详细信息和登录详细信息,或者当他们想搜索他们的登录名和个人信息时,搜索引擎可以使用AccountID从两个表中进行搜索。
到目前为止,我已经制作了两个新的表1,即个人信息有‘AccountID’_i和‘loginID’,另一个表是登录,info.it有‘loginID’_i。
我已经做了'loginID‘在个人信息和索引,但我不能为它分配外键约束,因为它没有检测到'loginID’在个人信息。
发布于 2015-05-20 09:24:00
您的AccountId应该是一个表中的主键,比如个人信息表。此AccountId应该是另一个表(登录)中的外键,并确保设置了Delete和Update。因此,在这种结构中,当个人信息被删除时,它在登录表中的相应记录将被自动删除。
DROP TABLE IF EXISTS `stacktest`.`personal_info`;
CREATE TABLE `stacktest`.`personal_info` (
`account_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`age` varchar(45) DEFAULT NULL,
PRIMARY KEY (`account_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `stacktest`.`login_info`;
CREATE TABLE `stacktest`.`login_info` (
`loginId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`account_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`loginId`),
KEY `FK_login_info_1` (`account_id`),
CONSTRAINT `FK_login_info_1` FOREIGN KEY (`account_id`) REFERENCES `personal_info` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
上面是如何创建两个表的方法。然后在两个表中插入一些值,
注意到,account_id值必须在两个表中都是相同的。
之后,您可以启动一个删除查询,如下所示:
从personal_info中删除accound_id=2;
这将从父表personal_info和子表login_info ( account_id为2)中删除行。
在子表中将account_id保持为NULL:
DROP TABLE IF EXISTS `stacktest`.`login_info`;
CREATE TABLE `stacktest`.`login_info` (
`loginId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`account_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`loginId`),
KEY `FK_login_info_1` (`account_id`),
CONSTRAINT `FK_login_info_1` FOREIGN KEY (`account_id`) REFERENCES `personal_info` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
https://stackoverflow.com/questions/30345061
复制相似问题