作为phpMyAdmin的新手,我想在我的一个表(column_1
)的列(Table_1
)与另一个表中的列(column_2
)之间创建一个关系( Table_2
)。
我首先在column_1
中对Table_1
进行索引,当我想在Table_1
的关系视图标签中创建关系时,在column_1
前面,我首先选择数据库从第一个下拉菜单中选择第二个下拉菜单中的Table_1
,但第三个下拉菜单(似乎应包括column_2
)没有选择选项。
我的phpMyAdmin版本是:4.1.6。
以下是我的" CREATE SHOW my_table":
的结果TABLE_1:
CREATE TABLE `Table_1` (
`column_1` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`column_1`),
KEY `FK_COLUMN1` (`column_1`))
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
TABLE_2:
CREATE TABLE `Table_2` (
`column_2` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`column_2`),
KEY `FK1_COLUMN2` (`column_2`))
ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
答案 0 :(得分:2)
我不知道PMA有什么问题。以下查询应该创建引用。如果失败,则错误消息将更多地展示;)
ALTER TABLE `this_table`
ADD CONSTRAINT `name_of_the_constraint` FOREIGN KEY (`this_column`)
REFERENCES `external_table` (`external_column`)
ON DELETE CASCADE ON UPDATE CASCADE;
ON DELETE CASCADE
表示如果external_table
中的行被删除,this_table
中的行也将被删除。同样有效的选项是RESTRICT
和SET NULL
。同样适用于UPDATE
(this_table
中的行也会更新)。
修改强>
回答你的意见:我在一个新的空数据库/方案上运行了以下SQL,所有运行完全没有错误。如果它不在您的机器上我不知道出了什么问题(我无法重现它)。如果跟随也在你的身上运行,你之前尝试的是什么不同?
CREATE TABLE `Table_1` (
`column_1` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`column_1`),
KEY `FK_COLUMN1` (`column_1`))
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `Table_2` (
`column_2` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`column_2`),
KEY `FK1_COLUMN2` (`column_2`))
ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `Table_1` (`column_1`) VALUES ( '1' ), ( '2' ); /* Add some both valid as invalid relations */
INSERT INTO `Table_2` (`column_2`) VALUES ( '1' ), ( '3' ); /* Add some both valid as invalid relations */
SET foreign_key_checks = 0;
ALTER TABLE Table_1 ADD FOREIGN KEY (column_1) REFERENCES Table_2(column_2) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE Table_2 ADD FOREIGN KEY (column_2) REFERENCES Table_1(column_1) ON DELETE RESTRICT ON UPDATE RESTRICT;
NB。通常只创建一个方向的外键。我已添加两个以显示任何方向都应在此设置中起作用。
答案 1 :(得分:0)
澄清:
Table_1有一个索引列1 Table_2有一个column2,您希望将其用作Table_1的外键
我认为您需要将column1作为Table_1的主键才能使其正常工作。
执行此操作后,Table_2关系视图中的第三个下拉列表会将column_1作为您可以选择的值。
希望这有帮助。
答案 2 :(得分:0)
选择您的数据库
从菜单中选择Designer
你会找到你所有的桌子。
从小菜单中选择create relation
然后选择您的reference key
和foreign key