mysql - 无法将外键约束添加为 GUID

标签 mysql sql

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

相关文章:

php - 复杂SQL查询优化建议

mysql - 一个 GUI 应用程序,在 SQL 查询上运行

MySQL groupwise MAX() 返回意外结果

php - 当数据库发生变化时自动更改 html 项目

mysql - 阻塞 friend sql(超慢sql??)

MySQL 用另一列的平均值创建新列

mysql - 如何选择两个日期条件

mysql - 这种连接在 SQL 中可行吗?

c# - ASP.NET和C#不断处理网站后面可能吗?

php - 如何处理日期的不良数据?