mysql - 只允许一个唯一的外键作为主键

标签 mysql sql database

我在mysql中有3个表,一个是公司表,另一个是许可证表,最后一个是两个主键之间的连接表,当一个人将公司ID添加到连接表中的许可证ID时,它允许一个许可证存在多个公司,这是不可能发生的,所以我需要做一些事情,只允许一个公司 ID 对应一个许可证 ID

这是表格

表格许可证

    CREATE TABLE `License` (
  `license_id` int(11) NOT NULL AUTO_INCREMENT,
  `license_number` varchar(45) NOT NULL,
  `start_date` date NOT NULL,
  `end_date` date NOT NULL,
  `duration` int(11) NOT NULL,
  `expiry_date` date NOT NULL,
  `product_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`license_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;
;

公司表

    CREATE TABLE `Company` (
  `company_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `physical_address` varchar(255) DEFAULT NULL,
  `postal_address` varchar(255) DEFAULT NULL,
  `reseller_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1;

和连接表

    CREATE TABLE `CompanyLicense` (
  `license_id` int(11) NOT NULL,
  `company_id` int(11) NOT NULL,
  PRIMARY KEY (`license_id`,`company_id`),
  KEY `companlicence_company_fk_idx` (`company_id`),
  CONSTRAINT `companylicense_company_fk` FOREIGN KEY (`company_id`) REFERENCES `Company` (`company_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `companylicense_license_fk` FOREIGN KEY (`license_id`) REFERENCES `License` (`license_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

到目前为止我已经有了

INSERT INTO CompanyLicense (license_id, company_id) VALUES
('2','6') on duplicate key update license_id = '2';

似乎没有完成这项工作

最佳答案

您需要使 companycompanylicense 中唯一:

ALTER TABLE companylicense ADD UNIQUE KEY (company)

或者更好的是,将company设为license中的一个字段,而不是使用链接表。

关于mysql - 只允许一个唯一的外键作为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574869/

相关文章:

c++ - 在 Linux 上分析数据库密集型代码

php - 如何在 PHP 中将特殊字符转换为 Symbol

mysql - 如何连接到 Excel Power Query 中的服务器端口

sql - 如何生成其他表中不存在的随机数?

sql - 需要有关SQL聚合查询的帮助

database - 将 csv 文件数据加载到表中

php - 在 Laravel 5.1 中使用 Cartalyst Sentinel 时出现问题

SQL group by 和 count 固定列值

sql - oracle sql developer tool - 提交后数据不可用

sql - 第二规范化阶段/正常形式和第三规范化阶段/正常形式之间的区别