gpt4 book ai didi

mysql - 编辑不正确创建的约束

转载 作者:行者123 更新时间:2023-11-29 10:41:46 25 4
gpt4 key购买 nike

我想我可能错误地创建了一个约束。我有三个表:事件、身份验证、登录。我希望身份验证成为“主”表,我将在其中插入数据以创建用户及其详细信息。它将与新创建的表(存储 session ID 的 Authentication)建立一对一关系(登录中的 id 到身份验证中的 id)。第三个表将与 AuthenticationID 的多行建立一对多关系,对应于 Login 的 id

这就是我创建的:

| Login | CREATE TABLE `Login` (
`id` int(6) unsigned NOT NULL AUTO_INCREMENT,
`TimeLoggedIn` text NOT NULL,
`sessionid` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`),
KEY `id_2` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 |

| Authentication | CREATE TABLE `Authentication` (
`id` int(6) unsigned NOT NULL AUTO_INCREMENT,
`userid` varchar(30) NOT NULL,
`password` varchar(30) NOT NULL,
`role` varchar(20) NOT NULL,
`email` varchar(50) DEFAULT NULL,
`AuthenticationID` int(6) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `Authentication_ibfk_1` FOREIGN KEY (`id`) REFERENCES `Login` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1 |

| Activity | CREATE TABLE `Activity` (
`num` int(11) NOT NULL AUTO_INCREMENT,
`AuthenticationID` int(6) unsigned NOT NULL,
`TorrentMag` mediumtext NOT NULL,
PRIMARY KEY (`num`),
KEY `FK_myKey2` (`AuthenticationID`),
CONSTRAINT `FK_myKey` FOREIGN KEY (`AuthenticationID`) REFERENCES `Authentication` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_myKey2` FOREIGN KEY (`AuthenticationID`) REFERENCES `Authentication` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=latin1 |

不幸的是,当我尝试在身份验证中插入新行时(在我创建约束之前它一直有效),

INSERT INTO Authentication (userid, password, role, email) VALUES ("user", "SeG^SU;B2_&Uhw", "user", "someone@mydomain.com");

它给出了错误:

Cannot add or update a child row: a foreign key constraint fails (`episodescopy`.`Authentication`, CONSTRAINT `Authentication_ibfk_1` FOREIGN KEY (`id`) REFERENCES `Login` (`id`))

所以我无意中创建了我需要的逆关系?另外,我似乎在表 Activity 上创建了重复约束?我怎样才能解决这个问题?

最佳答案

这是一个建议,希望至少能为您指明正确的方向。如果您想在 Authentication 表中创建用户,则引用 Authentication 主键(即 id)的任何其他表列都应该被声明为外键引用。

CREATE TABLE Login (
id int(6) unsigned NOT NULL AUTO_INCREMENT,
TimeLoggedIn text NOT NULL,
sessionid varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY id (id),
KEY id_2 (id),
CONSTRAINT fk_1 FOREIGN KEY (id) REFERENCES Authentication (id)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1

CREATE TABLE Authentication (
id int(6) unsigned NOT NULL AUTO_INCREMENT,
userid varchar(30) NOT NULL,
password varchar(30) NOT NULL,
role varchar(20) NOT NULL,
email varchar(50) DEFAULT NULL,
AuthenticationID int(6) unsigned DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1

您当前的设置正好相反,要求用户存在于Login 中,然后才能将其插入Authentication

关于mysql - 编辑不正确创建的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45342521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com