我有一个奇怪的。我无法使用以下命令创建表:
数据库中已存在表users,只添加usertimezones,但失败。
CREATE TABLE `Users` (
`AccessFailedCount` int(11) NOT NULL,
`EmailConfirmed` bit(1) NOT NULL,
`Id` char(36) NOT NULL,
`NormalizedUserName` varchar(256) DEFAULT NULL,
`NormalizedEmail` varchar(256) DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `UserNameIndex` (`NormalizedUserName`),
KEY `EmailIndex` (`NormalizedEmail`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `UserTimeZones` (
`Id` char(36) NOT NULL,
`UserId` char(36) NOT NULL,
`TimeZoneOffsetInSeconds` int NOT NULL,
`LastUpdatedAt` datetime(6) NOT NULL,
CONSTRAINT `PK_UserTimeZones` PRIMARY KEY (`Id`),
CONSTRAINT `FK_UserTimeZones_Users_UserId` FOREIGN KEY (`UserId`) REFERENCES `Users` (`Id`) ON DELETE CASCADE
);
SHOW ENGINE INNODB STATUS;
以下是状态显示的内容:
2条答案
按热度按时间jmp7cifd1#
https://dev.mysql.com/doc/refman/8.0/en/innodb-foreign-key-constraints.html
innodb表的外键定义受以下条件限制:
innodb允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引,其中引用的列按相同顺序列为第一列。
但奇怪的是,在引用表上似乎需要索引:
https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html#foreign-关键点示例
因此,请尝试在表中添加索引
注意:这是错误消息所说的。
col17t5w2#
----最新外键错误
2018-11-09 11:26:44 0x7f832c523700表/usertimezones外键约束错误:
外键(
UserId
)参考文献Users
(Id
)删除时(级联):在引用表中找不到引用列显示为第一列的索引,或者表中的列类型与引用表中的列类型不匹配。
请注意,在使用>=innodb-4.1.12创建的表中,enum和set的内部存储类型已更改,并且新表中的这些列不能引用旧表中的这些列。
请参阅http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html 正确的外键定义。
所以我有一个经典的“不能添加外键约束”。
我尝试过:
将users.id列作为第一列:不会更改任何内容
列类型相同,引擎也一样。。。
在数据库中应用没有数据的迁移->它可以工作
在没有数据->的数据库中运行脚本仍然不起作用。。。
有什么问题?
不确定这是否重要,但我使用实体框架核心。