我有表Players
和PlayerMeta
mysql> DESCRIBE Players;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| ID | int(5) | NO | PRI | NULL | auto_increment |
| PlayerName | varchar(20) | NO | PRI | NULL | |
| Birthdate | date | YES | | NULL | |
| Location | varchar(20) | YES | | NULL | |
| FirstName | varchar(15) | YES | | NULL | |
| Whitelisted | tinyint(1) | NO | | 1 | |
+-------------+-------------+------+-----+---------+----------------+
mysql> DESCRIBE PlayerMeta;
+----------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------+-------+
| ID | int(5) | NO | PRI | NULL | |
| JoinDate | date | YES | | NULL | |
| BuildQuota | int(2) | NO | | 2 | |
| RegisteredDate | date | YES | | NULL | |
| HideBirthdate | tinyint(1) | NO | | 0 | |
+----------------+------------+------+-----+---------+-------+
我正在尝试执行此命令,并返回Query OK:
ALTER TABLE PlayerMeta
ADD CONSTRAINT fk_PlayerID
FOREIGN KEY (ID)
REFERENCES Players(ID)
ON UPDATE CASCADE
ON DELETE CASCADE;
然而,当我运行SHOW CREATE TABLE PlayerMeta
时,它没有显示约束,也没有显示INFORMATION_SCHEMA
有什么想法?感谢。
编辑:这是SHOW CREATE TABLE PlayerMeta
:
mysql> SHOW CREATE TABLE PlayerMeta;
... a bunch of lines ...
| PlayerMeta | CREATE TABLE `PlayerMeta` (
`ID` int(5) NOT NULL,
`JoinDate` date DEFAULT NULL,
`BuildQuota` int(2) NOT NULL DEFAULT '2',
`RegisteredDate` date DEFAULT NULL,
`HideBirthdate` tinyint(1) NOT NULL DEFAULT '0',
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
编辑(2):ID
中的问题PlayerMeta
已经是主键,而外键不会与其一起使用。
答案 0 :(得分:2)
您无法为MyISAM创建外键。
只有InnoDB支持它们。
因此,您的解决方案是更改两个表的存储引擎。
ALTER TABLE Players ENGINE=InnoDB;
ALTER TABLE PlayerMeta ENGINE=InnoDB;
然后在添加FK约束的情况下重新应用ALTER
。
答案 1 :(得分:0)
MySQL不允许您对列本身FOREIGN KEY
创建PRIMARY KEY
约束。如果您的设计是这两个表共享一对一关系并且都保存有关Player
的信息,则将它们分开并将两个表合并为一个表可能没有意义。
在任何情况下,如果您希望将它们分开并对它们实施FOREIGN KEY
关系,则需要删除PRIMARY KEY
上的PlayerMeta.ID
。您可能仍然拥有UNIQUE
非主键索引。