我想我可能錯誤地創建了一個約束。我有三個表:活動,身份驗證,登錄。我希望身份驗證成爲「主」表,我將在其中插入數據以創建用戶以及他的詳細信息。它將具有一對一的關係(id
在登錄到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", "[email protected]");
它給了錯誤:
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的重複約束?我怎樣才能解決這個問題?
'user'是否在'Login'表中有相應的條目?這是我要檢查的第一件事,並且錯誤似乎暗示着什麼。 –
用戶正在創建。登錄表中的ID將在身份驗證表中創建用戶時更新,反之亦然。 – Droidzone
你確定你有這個?用戶必須存在於_Login_表_before_中,您可以在'Authentication'中引用它。這是這種情況嗎? –