当我尝试导入数据库时出现此错误
SQL query:
ALTER TABLE `bid`
ADD CONSTRAINT `bid_ibfk_4` FOREIGN KEY (`auction_contact_id`) REFERENCES `auction_contact` (`auction_contact_id`),
ADD CONSTRAINT `bid_ibfk_3` FOREIGN KEY (`car_id`) REFERENCES `car` (`car_id`)
MySQL said: Documentation
#1826 - Duplicate foreign key constraint name 'projekt_classics/bid_ibfk_3'
Run Code Online (Sandbox Code Playgroud)
查看所有外键,我得到了这个结果
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE = 'FOREIGN KEY'
Run Code Online (Sandbox Code Playgroud)
结果
def projekt_classics bid_ibfk_2 projekt_classics bid FOREIGN KEY
def projekt_classics bid_ibfk_3 projekt_classics bid FOREIGN KEY
def projekt_classics car_ibfk_1 projekt_classics car FOREIGN KEY
def projekt_classics car_ibfk_3 projekt_classics car FOREIGN KEY
def projekt_classics car_ibfk_4 projekt_classics car FOREIGN KEY
def projekt_classics car_brand_ibfk_1 projekt_classics car_brand FOREIGN KEY
Run Code Online (Sandbox Code Playgroud)
搜索 sqlbid_ibfk_3约束只显示 1 次。所有数据都在导入的数据库中,但我想知道如何避免此错误。
编辑: 首先删除所有表运行查询没有问题。我使用 PHPmyadmin 导出我的数据库。我猜这个错误是因为在尝试再次创建之前尚未删除外键约束。
如果查看查询结果,则外键bid_ibfk_3 已经存在。实际上它在结果的第二行。
def projekt_classics bid_ibfk_2 projekt_classics bid FOREIGN KEY
--the row below is the foreign key that you are trying to create
def projekt_classics bid_ibfk_3 projekt_classics bid FOREIGN KEY
def projekt_classics car_ibfk_1 projekt_classics car FOREIGN KEY
def projekt_classics car_ibfk_3 projekt_classics car FOREIGN KEY
def projekt_classics car_ibfk_4 projekt_classics car FOREIGN KEY
def projekt_classics car_brand_ibfk_1 projekt_classics car_brand FOREIGN KEY
Run Code Online (Sandbox Code Playgroud)
这就是为什么当您尝试执行此操作时会获得重复的外键约束名称的原因:
ADD CONSTRAINT `bid_ibfk_3` FOREIGN KEY (`car_id`) REFERENCES `car` (`car_id`)
Run Code Online (Sandbox Code Playgroud)
您可以修改您的查询以在实际创建之前先检查您尝试创建的外键是否不存在。
IF NOT EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE()
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME = 'bid_ibfk_3') THEN
ALTER TABLE `bid` ADD CONSTRAINT `bid_ibfk_3`
FOREIGN KEY (`car_id`) REFERENCES `car` (`car_id`);
END IF
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28233 次 |
| 最近记录: |