簡體   English   中英

更改表外鍵約束失敗

[英]Alter table foreign key constraint fails

當我嘗試這樣做時:

ALTER TABLE credit_card ADD CONSTRAINT fk_company FOREIGN KEY (company_id) REFERENCES company (id);

我得到了外鍵約束失敗的錯誤,但我不明白為什么。 company_id 列與 company.id 列具有相同類型,如您所見:

公司表

CREATE TABLE `company` (
   `id` bigint NOT NULL AUTO_INCREMENT,
   `code` varchar(10) NOT NULL,
   `description` varchar(50) NOT NULL,
   `currency_id` bigint NOT NULL,
   `language_id` bigint DEFAULT NULL,
   `address_id` bigint DEFAULT NULL,
   `creation_time` datetime NOT NULL,
   `modification_time` datetime DEFAULT NULL,
   `deleted` tinyint(1) NOT NULL DEFAULT '0',
   `cost_center_modifiable` tinyint(1) DEFAULT NULL,
   `use_colleague_cost_center` tinyint(1) DEFAULT NULL,
   `fixed_guest_company` varchar(50) DEFAULT NULL,
   `info_number` int DEFAULT NULL,
   `use_kilometric_rate` tinyint(1) DEFAULT NULL,
   `use_multiple_km_rate` tinyint(1) DEFAULT NULL,
   `email_required` tinyint(1) DEFAULT NULL,
   `logo` varchar(255) DEFAULT NULL,
   `holding_id` bigint NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `code` (`code`),
   KEY `fk_company_address1` (`address_id`),
   KEY `fk_company_currency1` (`currency_id`),
   KEY `company_language_FK` (`language_id`),
   KEY `company_holding_FK` (`holding_id`),
   CONSTRAINT `company_currency_FK` FOREIGN KEY (`currency_id`) REFERENCES `currency` (`id`),
   CONSTRAINT `company_holding_FK` FOREIGN KEY (`holding_id`) REFERENCES `holding` (`id`),
   CONSTRAINT `company_language_FK` FOREIGN KEY (`language_id`) REFERENCES `language` (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=142 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

信用卡表

CREATE TABLE `credit_card` (
   `id` bigint NOT NULL AUTO_INCREMENT,
   `username` varchar(50) DEFAULT NULL,
   `pan` varchar(16) NOT NULL,
   `account` varchar(50) DEFAULT NULL,
   `begin_date` date NOT NULL,
   `end_date` date NOT NULL,
   `disabled` tinyint(1) NOT NULL DEFAULT '0',
   `creation_time` datetime NOT NULL,
   `modification_time` datetime DEFAULT NULL,
   `company_id` bigint NOT NULL,
   PRIMARY KEY (`id`),
   KEY `username` (`username`),
   KEY `pan` (`pan`),
   CONSTRAINT `fk_credit_card_user_ext` FOREIGN KEY (`username`) REFERENCES `users_extension` (`username`)
 ) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8mb3

不要將自動遞增列作為外鍵,或者除非不確定,否則不要將這些列引用到自動遞增列,因為如果預期在任何一個表中進行冗余條目,它最終可能會使具有外鍵問題的表成為約束違規。

可能是相關數據已經被攝取然后表被改變的情況

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM