当父表具有Generated Virtual列时,MySQL Workbench不会产生约束

时间:2018-04-07 20:38:38

标签: mysql mysql-workbench

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代码手动添加约束是当前有效的工作。请参阅接受的答案。

1 个答案:

答案 0 :(得分:1)

可以确认,这是WB中的一个错误。用MySQL开发团队提出了它。

Bug link