mysql - 如何在此表上正确设置 2 个外键约束以实现 2 个表之间的多对多关系?

标签 mysql sql database foreign-keys mariadb

我在 MariaDB 上工作(这和在 MySQL 上工作一样)。

我在尝试在实现 2 个表之间多对多关系的表的 2 个字段上设置 2 个外键约束时遇到一些问题。

所以我有以下表格:

  1. ACCOMODATION:每条记录代表一家酒店,包含以下字段:

     Field                                                            Type       Null Key Default    Extra                      
     ---------------------------------------------------------------------------------------------------------------------------
     id                                                               bigint(20) unsigned NO   PRI            auto_increment             
     user_id                                                          bigint(20) unsigned NO                                             
     accomodation_name                                                varchar(100) NO                                             
     description                                                      text       YES                                            
     nation                                                           varchar(100) YES                                            
     region                                                           varchar(100) YES                                            
     province                                                         varchar(100) YES                                            
     city                                                             varchar(100) YES                                            
     stars                                                            int(10) unsigned YES                                            
     geographical_position                                            point      YES                                            
     accomodation_typological_id                                      bigint(20) unsigned YES  MUL                                       
     accomodation_service_id                                          bigint(20) YES      
    
  2. SERVICE:其中每条记录代表上表中酒店提供的一项服务:

     Field                                                            Type       Null Key Default    Extra                      
     ---------------------------------------------------------------------------------------------------------------------------
     id                                                               bigint(20) NO   PRI            auto_increment             
     description                                                      varchar(255) NO       
    

然后我创建了一个 ACCOMODATION_SERVICE 表,它实现了前两个表之间的多对多关系,这些是字段:

Field                                                            Type       Null Key Default    Extra                      
---------------------------------------------------------------------------------------------------------------------------
id                                                               bigint(20) unsigned NO   PRI            auto_increment             
accomodation_id                                                  bigint(20) unsigned NO   MUL                                       
service_id                                                       bigint(20) unsigned NO                                             

因此,在该表的 accomodation_id 字段中,我将 accomodation 表的 id 放入 service_id 这张表的 id service 表。

如何正确指定这 2 个字段必须是 accomodationservice 表的外键?我认为我必须指定此引用约束。

最佳答案

你需要做的

ALTER TABLE accomodation_service ADD CONSTRAINT fk_accomodation_id FOREIGN KEY(accomodation_id) REFERENCES accomodate(id)

同样的

ALTER TABLE accomodation_service ADD CONSTRAINT fk_service_id FOREIGN KEY(accomodationfk_service_id_id) REFERENCES service(id)

关于mysql - 如何在此表上正确设置 2 个外键约束以实现 2 个表之间的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848492/

相关文章:

sql - 使用 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 代替 TEXT、NTEXT 和 IMAGE 有什么好处?

mysql - 按日期加入 SQL 查询

mysql - 查询表时如何创建第三列,即前两列的总和(MySQL)

sql - 循环遍历临时表并插入到另一个表

mysql - 使用连接创建 View

sql-server - 在 SQL Server 数据库中插入数据时锁定表

mysql - 关系型数据库管理系统的安全性

mysql - SQL 查询仅显示事件作业,而不显示过期作业

php - 如何使用mySQL添加 'A' ,'B' ,'C'这样的分数

sql - 使用 ssis 将表和表的一部分从一个数据库移动到另一个数据库