在2个表之间创建外键

时间:2015-05-20 09:04:45

标签: mysql phpmyadmin

好的,所以就是这样。我在phpmyadmin中有2个表。一个用于个人详细信息,另一个用于登录信息。两个表都有AccountID,因此我尝试使用外键约束来连接表。在我这样做之后,我似乎无法用新数据更新表格。在约束之前,更新表格工作正常。

我想要做的是在这些表格中存储用户登录信息和个人信息。然后,每当用户想要删除他们当前的帐户时,从两个表中删除个人详细信息和登录详细信息,或者当他们想要搜索他们的登录和个人信息时,搜索引擎可以使用AccountID从两个表中搜索。

到目前为止。我已经制作了2张新表.1表是个人信息,其中包括“帐户ID”和“A_I”[主要]和“登录ID”。另一张表是登录信息。它有' loginID' [A_i] [PRIMARY]

我已经制作了' loginID'在个人信息和索引,但我不能为它分配外键约束,因为它没有检测到' loginID'在个人信息中。

1 个答案:

答案 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;