Mysql 是否允许使用多个外键?
我有多个表,我想要多个外键Mysql 是否允许使用多个外键?,mysql,Mysql,我有多个表,我想要多个外键 Users Table +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | idUsers | int(11) | NO | PRI | NULL |
Users Table
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| idUsers | int(11) | NO | PRI | NULL | |
| Username | varchar(45) | YES | | NULL | |
| Password | varchar(45) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
Friends Table
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| idUser | int(11) | YES | MUL | NULL | |
| idFriend | int(11) | YES | MUL | NULL | |
| Status | varchar(45) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
Groups Table
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| idGroup | int(11) | NO | PRI | NULL | |
| GroupName | varchar(45) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
Members Table
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| idGroup | int(11) | YES | MUL | NULL | |
| idMember | int(11) | YES | MUL | NULL | |
+----------+---------+------+-----+---------+-------+
这是my Members表的外键,因此idGroup和idMember都对应于Users表idUsers
ALTER TABLE `GroupOrder`.`Friends`
ADD CONSTRAINT `idFriend`
FOREIGN KEY (`idFriend`)
REFERENCES `GroupOrder`.`Users` (`idUsers`)
ON DELETE CASCADE
ON UPDATE CASCADE;
我想在Friends表中创建另一个与Users表对应的外键。我做错了。每次我这样做都会出错
ALTER TABLE `GroupOrder`.`Friends`
ADD CONSTRAINT `idFriend`
FOREIGN KEY (`idUser` , `idFriend`)
REFERENCES `GroupOrder`.`Users` (`idUsers` , `idUsers`)
ON DELETE CASCADE
ON UPDATE CASCADE;
错误
ERROR 1005: Can't create table 'GroupOrder.#sql-2fce_1e' (errno: 150)
SQL Statement:
ALTER TABLE `GroupOrder`.`Friends`
ADD CONSTRAINT `idFriend`
FOREIGN KEY (`idUser` , `idFriend`)
REFERENCES `GroupOrder`.`Users` (`idUsers` , `idUsers`)
ON DELETE CASCADE
ON UPDATE CASCADE
ERROR: Error when running failback script. Details follow.
ERROR 1050: Table 'Friends' already exists
SQL Statement:
CREATE TABLE `Friends` (
`idUser` int(11) DEFAULT NULL,
`idFriend` int(11) DEFAULT NULL,
`Status` varchar(45) DEFAULT NULL,
KEY `idUser_idx` (`idFriend`),
KEY `idUser_idx1` (`idUser`,`idFriend`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我假设friends是一个从用户到用户的多对多映射。这意味着友谊可能是单向的,但这并不一定是错的 您已经将朋友中的idfriend映射到用户中的idusers,现在将朋友中的idusers映射到用户中的idusers
ALTER TABLE `GroupOrder`.`Friends`
ADD CONSTRAINT `idFriend2`
FOREIGN KEY (`idUser`)
REFERENCES `GroupOrder`.`Users` (`idUsers`)
ON DELETE CASCADE
ON UPDATE CASCADE;
现在,您可能希望在friends中强制iduser和idfriend的唯一性,这样就不会重复
alter table `grouporder`.friends`
add unique(oduser, idfriend);
您没有显示GroupOrder TableGroupOrder是数据库您似乎试图定义两个同名外键。不要那样做。