好的,所以就是这样。我在phpmyadmin中有2个表。一个用于个人详细信息,另一个用于登录信息。两个表都有AccountID
,因此我尝试使用外键约束来连接表。在我这样做之后,我似乎无法用新数据更新表格。在约束之前,更新表格工作正常。
我想要做的是在这些表格中存储用户登录信息和个人信息。然后,每当用户想要删除他们当前的帐户时,从两个表中删除个人详细信息和登录详细信息,或者当他们想要搜索他们的登录和个人信息时,搜索引擎可以使用AccountID
从两个表中搜索。
到目前为止。我已经制作了2张新表.1表是个人信息,其中包括“帐户ID”和“A_I”[主要]和“登录ID”。另一张表是登录信息。它有' loginID' [A_i] [PRIMARY]
我已经制作了' loginID'在个人信息和索引,但我不能为它分配外键约束,因为它没有检测到' loginID'在个人信息中。
答案 0 :(得分:1)
您的AccountId应该是一个表中的主键,例如个人信息表。 此AccountId应该是另一个表(登录)中的外键,并确保您设置删除级联和更新级联。 因此,在此结构中,当删除个人信息时,将自动删除登录表中的相应记录。
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;

以上是如何创建2个表的方式。 然后在两个表中插入一些值,
注意两个表中的account_id值必须相同。
之后,您可以触发删除查询,如:
从personal_info中删除accound_id = 2;
这将从父表personal_info以及子表login_info中删除行,其中account_id为2
在子表中将account_id保持为NOT 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;