我在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';
似乎没有完成这项工作
最佳答案
您需要使 company
在 companylicense
中唯一:
ALTER TABLE companylicense ADD UNIQUE KEY (company)
或者更好的是,将company
设为license
中的一个字段,而不是使用链接表。
关于mysql - 只允许一个唯一的外键作为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574869/