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是数据库您似乎试图定义两个同名外键。不要那样做。