【发布时间】:2017-07-26 09:04:07
【问题描述】:
我有一个包含三个表的数据库。 表 Authentication 包含以下内容:
+----------+-----------------+------+-----+---------+----------------+
| 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 | |
+----------+-----------------+------+-----+---------+-------+
Authentication 的 id 字段与其他表中的 id 之间存在关系。
我需要在 Activity 中添加多行,每个 id 有几个 Torrent 值。不幸的是,当我尝试添加具有重复 id 值的新行时:
INSERT INTO `Activity` (`id`, `Torrents`) VALUES ('1', 'dssfsdffdsffs');
它给了我错误:#1062 - Duplicate entry '1' for key 'PRIMARY'
我该如何解决?我怎么创建表错了?
我已阅读以下明显重复的问题:
虽然它说要删除它作为我的主键,但 mysql 不允许我创建关系,除非我将它设为主键。
【问题讨论】:
-
这不是应该发生的事情吗?
-
@Strawberry 你的意思是我的行不能包含重复的
id值吗? -
如果它是主键则不会。要么 id 和 torrent 一起形成一个自然的 PK,要么你有一个替代的 activity_id 列。如果您选择代理键,那么通常会在剩余的列上形成一个 UNIQUE KEY。
-
@Strawberry 如果我没有将其设为主键,我将无法创建关系。那么我该如何解决呢?将另一个字段设为主要字段?我还能创建与 id 字段的关系吗?