我使用以下脚本在mysql中创建了一个表:
CREATE TABLE IF NOT EXISTS users_x_activities(
id int NOT NULL auto_increment,
id_user int unsigned NOT NULL,
id_attivita int unsigned NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (id_user) REFERENCES utente(id),
FOREIGN KEY (id_attivita) REFERENCES attivita(id)
) ENGINE = INNODB;
当我从phpMyAdmin导出创建的表时,我获得了以下脚本
CREATE TABLE IF NOT EXISTS `users_x_activities` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_user` int(10) unsigned NOT NULL,
`id_attivita` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `id_user` (`id_user`),
KEY `id_attivita` (`id_attivita`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
所以问题是:我的外键约束在哪里?KEY
引用FK吗?看起来utente
和attivita
这两个表在新生成的脚本中不再被引用。我哪里做错了?
编辑
在phpMyAdmin中,配置表的导出时,我发现了选项“Display Foreign Key Relationship”(显示外键关系)。如果我标记了此选项,我还将在脚本中获得此代码
--
-- RELATIONS FOR TABLE `users_x_activity`:
-- `id_user`
-- `utente` -> `id`
-- `id_attivita`
-- `attivita` -> `id`
--
--
-- Constraints for dumped tables
--
--
-- Constraints for table `users_x_activity`
--
ALTER TABLE `users_x_activity`
ADD CONSTRAINT `users_x_activities_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `utente` (`id`),
ADD CONSTRAINT `users_x_activities_ibfk_2` FOREIGN KEY (`id_attivita`) REFERENCES `attivita` (`id`);
这意味着,如果我添加选项“显示外键关系”,我也获得FK约束?在其他情况下不是?
3条答案
按热度按时间x8goxv8g1#
因此,问题是:外键约束在哪里?
它们是在数据库中定义的。
SHOW CREATE TABLE users_x_activities
的输出将包括外键约束定义。外键约束的定义可能出现在所生成脚本末尾的单独ALTER TABLE语句中。
KEY是否指FK?
这里的
KEY id_user (id_user)
号指的是一个索引。新生成的脚本中似乎不再引用utente和attivita这两个表。
是的,您说得对。CREATE TABLE语句中不包括外键约束条件。
"我哪里做错了"
MySQL
SHOW CREATE TABLE users_x_activities
将包含外键约束。外键约束可能包含在phpMyAdmin生成的脚本中,但在脚本的末尾,在单独的
ALTER TABLE
语句中。2cmtqfgy2#
使用phpmyadmin管理表时,有两种类型的约束:
Setting up a foreign key constraint
wqlqzqxt3#
请遵循下列步骤:
1.导出时间客户配置