首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个表之间创建外键

在两个表之间创建外键
EN

Stack Overflow用户
提问于 2015-05-20 09:04:45
回答 1查看 717关注 0票数 0

好吧,就像这样。我在phpmyadmin有两张桌子。一个是个人信息,另一个是登录信息。这两个表都有AccountID,所以我尝试使用外键约束来连接这些表。这样做之后,我似乎无法用新的数据更新表。在约束之前,更新表很好。

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

到目前为止,我已经制作了两个新的表1,即个人信息有‘AccountID’_i和‘loginID’,另一个表是登录,info.it有‘loginID’_i。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-20 09:24:00

您的AccountId应该是一个表中的主键,比如个人信息表。此AccountId应该是另一个表(登录)中的外键,并确保设置了Delete和Update。因此,在这种结构中,当个人信息被删除时,它在登录表中的相应记录将被自动删除。

代码语言:javascript
复制
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:

代码语言:javascript
复制
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;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30345061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档