我有一个包含三个表的数据库。 表身份验证包含以下内容:
+----------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-----------------+------+-----+---------+----------------+
| id | int(6) unsigned | NO | PRI | NULL | auto_increment |
| userid | varchar(30) | NO | | NULL | |
| password | varchar(30) | NO | | NULL | |
| role | varchar(20) | NO | | NULL | |
| email | varchar(50) | YES | | NULL | |
+----------+-----------------+------+-----+---------+----------------+
登录包含以下内容:
+--------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-----------------+------+-----+---------+----------------+
| id | int(6) unsigned | NO | PRI | NULL | auto_increment |
| TimeLoggedIn | text | NO | | NULL | |
| sessionid | varchar(255) | NO | | NULL | |
+--------------+-----------------+------+-----+---------+----------------+
活动:
+----------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-----------------+------+-----+---------+-------+
| id | int(6) unsigned | NO | PRI | NULL | |
| Torrents | mediumtext | NO | | NULL | |
+----------+-----------------+------+-----+---------+-------+
在其他表中,身份验证的id字段与id之间存在关联。
我需要在Activity中添加多行,每个id都有多个Torrent值。不幸的是,当我尝试添加一个带有重复id值的新行时:
INSERT INTO `Activity` (`id`, `Torrents`) VALUES ('1', 'dssfsdffdsffs');
它给了我错误:#1062 - Duplicate entry '1' for key 'PRIMARY'
我该如何解决?我是怎么创建错误的表的?
我已经阅读了以下明显重复的问题:
但是虽然它说要删除它作为我的主键,但mysql不允许我创建一个关系,除非我把它作为主键。
答案 0 :(得分:1)
通过将主键引用到主键,您无法启动一对多关系。这将是一对一的关系。
在Login和Activity表中,您需要使用外键来引用身份验证的ID。例如:
CONSTRAINT `FK_Login` FOREIGN KEY (`AuthenticationID`) REFERENCES `Authentication` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE