繁体   English   中英

无法将外键约束添加为GUID

[英]Cannot add foreign key constraint as GUID

我正在尝试将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;

我收到此错误:

无法添加外键约束

当我执行改变时,我做错了什么? 谢谢,节日快乐!

问题是密钥定义中的ON DELETE SET NULL 来自MySQL doc

如果指定SET NULL操作,请确保未将子表中的列声明为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值,它将起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM