在两个表之间创建外键
Creating foreign key between 2 tables
好的,是这样的。我在 phpmyadmin 中有 2 tables。一个用于个人详细信息,另一个用于登录信息。两个 table 都有 AccountID
,所以我尝试使用外键约束来连接 table。在我这样做之后,我似乎无法用新数据更新 table。在约束之前,更新 tables 工作正常。
我想做的是在这些 table 中存储用户登录信息和个人信息。然后,每当用户想要删除他们的当前帐户时,个人详细信息和登录详细信息都会从两个 table 中删除,或者当他们想要搜索他们的登录名和个人信息时,搜索引擎可以从两个 [=29] 中搜索=]s 与 AccountID
.
所以far.i有2个新的tables.1 table这是个人信息有'AccountID'[A_I][PRIMARY]和'loginID'.另一个 table 是登录名 info.it 有 'loginID'[A_i][PRIMARY]
我已经在个人信息和索引中创建了 'loginID',但是我无法为其分配外键约束,因为它没有在个人信息中检测到 'loginID'。
您的 AccountId 应该是 table 中的主键,比如个人信息 table。
此 AccountId 应该是另一个 table(登录)中的外键,并确保您设置了 Delete Cascade 和 Update Cascade。
所以在这个结构中,当个人信息被删除时,其在登录table中对应的记录也会被自动删除。
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 table 的创建方式。
然后在 table,
中插入一些值
注意两个table中的account_id值必须相同。
之后,您可以触发删除查询,例如:
从 personal_info 中删除 accound_id=2;
这将从父 table personal_info 和子 table login_info 中删除行,其中 account_id 是 2
在子 table 中将 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;
好的,是这样的。我在 phpmyadmin 中有 2 tables。一个用于个人详细信息,另一个用于登录信息。两个 table 都有 AccountID
,所以我尝试使用外键约束来连接 table。在我这样做之后,我似乎无法用新数据更新 table。在约束之前,更新 tables 工作正常。
我想做的是在这些 table 中存储用户登录信息和个人信息。然后,每当用户想要删除他们的当前帐户时,个人详细信息和登录详细信息都会从两个 table 中删除,或者当他们想要搜索他们的登录名和个人信息时,搜索引擎可以从两个 [=29] 中搜索=]s 与 AccountID
.
所以far.i有2个新的tables.1 table这是个人信息有'AccountID'[A_I][PRIMARY]和'loginID'.另一个 table 是登录名 info.it 有 'loginID'[A_i][PRIMARY]
我已经在个人信息和索引中创建了 'loginID',但是我无法为其分配外键约束,因为它没有在个人信息中检测到 'loginID'。
您的 AccountId 应该是 table 中的主键,比如个人信息 table。 此 AccountId 应该是另一个 table(登录)中的外键,并确保您设置了 Delete Cascade 和 Update Cascade。 所以在这个结构中,当个人信息被删除时,其在登录table中对应的记录也会被自动删除。
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 table 的创建方式。 然后在 table,
中插入一些值注意两个table中的account_id值必须相同。
之后,您可以触发删除查询,例如:
从 personal_info 中删除 accound_id=2;
这将从父 table personal_info 和子 table login_info 中删除行,其中 account_id 是 2
在子 table 中将 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;