【问题标题】:MySQL relationship with 2 tableMySQL与2表的关系
【发布时间】:2019-01-09 09:27:06
【问题描述】:

我有两张桌子:

CREATE TABLE `companies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`industry_id` int(11) DEFAULT NULL,
 ... other fields ...
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
 CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`) 
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

和:

CREATE TABLE `industries` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我尝试在第二个表中添加外键:

ALTER TABLE industries ADD FOREIGN KEY (id) REFERENCES companies(industry_id) ON DELETE RESTRICT;

但我得到了下一个错误:

不能添加外键约束

如何添加正确的 fkey?

【问题讨论】:

  • 外键中的所有字段都必须被索引,并且从 ORM 的角度来看,关系应该是从公司到行业的另一种方式...ADD FOREIGN KEY (industry_id) REFERENCES industries(id)

标签: mysql foreign-keys relational-database


【解决方案1】:

我想你做错了。主键不能是外键。 让我们做些小改动,就能给你同样的价值

ALTER TABLE companies ADD FOREIGN KEY (industry_id) REFERENCES industries(id) ON DELETE RESTRICT;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2019-12-17
    • 1970-01-01
    • 2014-01-15
    • 2023-02-13
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多