Cannot add foreign key constraint

JackIlPazzo

Utente Attivo
25 Lug 2014
69
0
6
Ciao,

sto cercando di associare come chiave esterna il GUID della tabella "service_categories" con questa query:

Codice:
ALTER TABLE `services`
  ADD CONSTRAINT `services_ibfk_1` FOREIGN KEY (`guid_service_categories`) REFERENCES `service_categories` (`GUID`) ON DELETE SET NULL ON UPDATE CASCADE;

Ecco la struttura della tabella services:

Codice:
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;

Ed ecco quella di service_categories

Codice:
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;

Ottengo però il seguente messaggio di errore:

Cannot add foreign key constraint

Quando eseguo l'alter... Cosa sto sbagliando?
 
Ciao,
credo che il problema sia questo :
ON DELETE SET NULL significa che il campo guid_service_categories della tabella services deve contenere null quando un record corrispondente nell'altra tabella viene cancellato, ma questo non sarebbe possibile perché quel campo ha l'attibuto not null.
In pratica prima di costruire la FK dovresti eseguire una query come questa:

ALTER TABLE `services` CHANGE `guid_service_categories` `guid_service_categories` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL ;

oppure modificare la CREATE TABLE.

Spero di esserti stato utile, buona serata.

s.
 

Discussioni simili