我正在尝试将 FK
作为 GUID 关联到我的表 service_categories
,这是查询:
ALTER TABLE `services`
ADD CONSTRAINT `services_ibfk_1` FOREIGN KEY (`guid_service_categories`) REFERENCES `service_categories` (`GUID`) ON DELETE SET NULL ON UPDATE CASCADE;
这是我的表结构service
CREATE TABLE IF NOT EXISTS `services` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`GUID` char(36) NOT NULL UNIQUE,
`name` varchar(256) DEFAULT NULL,
`duration` int(11) DEFAULT NULL,
`price` decimal(10,2) DEFAULT NULL,
`currency` varchar(32) DEFAULT NULL,
`description` text,
`guid_service_categories` char(36) NOT NULL,
`data` int(11) NOT NULL,
`lastUpdated` varchar(36),
PRIMARY KEY (`id`),
KEY `guid_service_categories` (`guid_service_categories`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
这是我的service_categories
CREATE TABLE IF NOT EXISTS `service_categories` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`GUID` char(36) NOT NULL UNIQUE,
`name` varchar(256) DEFAULT NULL,
`description` text,
`data` int(11) NOT NULL,
`lastUpdated` varchar(36),
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
我收到这个错误:
Cannot add foreign key constraint
当我执行更改时,我做错了什么?谢谢,节日快乐!
最佳答案
问题是键定义中的 ON DELETE SET NULL
。 From MySQL doc :
If you specify a SET NULL action, make sure that you have not declared the columns in the child table as NOT NULL.
如果列不能按定义为 NULL,则不能在 ON DELETE
上使用 SET NULL
。
如果将 alter 语句更改为 RESTRICT 或 CASCADE:
ALTER TABLE `services`
ADD CONSTRAINT `services_ibfk_1` FOREIGN KEY (`guid_service_categories`) REFERENCES `service_categories` (`GUID`) ON DELETE CASCADE ON UPDATE CASCADE;
或允许 NULL 值的列定义,它将起作用。
关于mysql - 无法将外键约束添加为 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34528367/