[英]Cannot add foreign key constraint - Cannot find an index in the referenced table
我目前正在嘗試添加一個關聯表,但其中一個外鍵失敗,並顯示此 InnoDB 狀態:
在引用的表中找不到索引,其中引用的列顯示為表中的第一列或列類型,並且引用的表與約束不匹配。 請注意,使用 >= InnoDB-4.1.12 創建的表中 ENUM 和 SET 的內部存儲類型發生了變化,並且舊表中的此類列不能被新表中的此類列引用。
被引用的表確實有一個主鍵。 它在同一個字符集/排序規則中。 它正在使用 InnoDB,並且主鍵與新表中的 FK 具有相同的類型。
它有一個名為 PRIMARY 的索引,其中 pk 列被選中並且是 #1。
這是被引用的表
CREATE TABLE `oauthtokens` (
`useridentifier` varchar(100) CHARACTER SET utf8 NOT NULL,
`guid` varchar(36) CHARACTER SET utf8 DEFAULT NULL,
`accesstoken` varchar(100) CHARACTER SET utf8 NOT NULL,
`refreshtoken` varchar(100) CHARACTER SET utf8 NOT NULL,
`expirytime` varchar(45) CHARACTER SET utf8 NOT NULL,
`is_master_user` tinyint(1) DEFAULT '0',
PRIMARY KEY (`useridentifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
這是我要創建的新表
CREATE TABLE `UserRoles` (
`UserId` varchar(100) NOT NULL,
`RoleId` int NOT NULL,
PRIMARY KEY (`UserId`, `RoleId`),
CONSTRAINT `FK_UserRoles_Roles_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `Roles` (`Id`) ON DELETE CASCADE,
CONSTRAINT `FK_UserRoles_oauthtokens_UserId` FOREIGN KEY (`UserId`) REFERENCES `oauthtokens` (`useridentifier`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
FK_UserRoles_Roles_RoleId 有效,但 FK_UserRoles_oauthtokens_UserId 無效。
我在 8.0.17 上對此進行了測試並得到了錯誤:
錯誤 3780 (HY000):在外鍵約束 'FK_UserRoles_oauthtokens_UserId' 中引用列 'UserId' 和引用列 'useridentifier' 不兼容。
UserRoles.UserId
正在使用表的默認字符集 utf8mb4,但您試圖使其引用使用字符集 utf8 的列oauthtokens.useridentifier
。
外鍵列和它引用的列必須使用相同的字符集和相同的排序規則。
我讓它以這種方式工作:
ALTER TABLE oauthtokens CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
然后添加外鍵就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.