SETUP
MySQL Workbench(版本6.3.9)
MySQL 5.7.21
我的设置很简单..我有2个表:
CREATE TABLE `UserDevices` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`UserID` int(11) DEFAULT NULL,
`UUID` binary(16) DEFAULT NULL,
`DeviceName` varchar(45) DEFAULT NULL,
`DeviceType` tinyint(3) NOT NULL DEFAULT '1',
`CreatedDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`TimeStamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `UserInfo` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`UUID` binary(16) DEFAULT NULL,
`UUIDText` varchar(40) GENERATED ALWAYS AS (insert(insert(insert(insert(hex(`UUID`),9,0,'-'),14,0,'-'),19,0,'-'),24,0,'-')) VIRTUAL,
`FirstName` varchar(45) DEFAULT NULL,
`LastName` varchar(45) DEFAULT NULL,
`FullName` varchar(90) GENERATED ALWAYS AS (concat(`FirstName`,' ',`LastName`)) VIRTUAL,
`Email` varchar(120) DEFAULT NULL,
`Status` tinyint(3) DEFAULT '0',
`AccountType` tinyint(3) DEFAULT '1',
`CreatedDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`TimeStamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
问题
在Workbench中工作时,我只是尝试在“UserID”列上的表“UserDevices”中创建一个外键约束,指向表“UserInfo”列“ID”。选择“UserInfo”作为参考表时。我不能在UserID旁边放一个检查。也没有列显示在Referenced Column下的下拉列表中..
问题
我知道这种情况会发生的原因有很多。但我没有看到任何数据类型不匹配或这样可以解释这一点。是什么让我无法选择UserID.ID?
P.S。使用“DeviceID”列设置另一个名为“DeviceMeasurements”的表我完全成功地设置了与预期完全相同的约束。
更新
因为这是我第一次使用Generated Virtual Columns,所以这是一种预感。我进入表中并删除了“UUIDText”和“FullName”列。现在我可以根据需要构建我的约束。但我的问题是。为什么我不能用上面构建的表构建约束!?
更新2
这已被确认为WorkBench中的错误。通过SQL代码手动添加约束是当前有效的工作。请参阅接受的答案。