Domanda

Ciao a tutti, ho la seguente tabella "utenti" in MySQL:

 CREATE TABLE `users` (
  `uid` int(11) NOT NULL auto_increment,
  `fname` varchar(50) NOT NULL,
  `lname` varchar(50) NOT NULL,
  `role` varchar(75) NOT NULL,
  `region` tinyint(4) unsigned default NULL,
  `username` varchar(25) NOT NULL,
  `password` varchar(75) NOT NULL,
  `new_pass` varchar(5) default NULL,
  PRIMARY KEY  (`uid`),
  UNIQUE KEY `username` (`username`),
  KEY `role` (`role`),
  KEY `region` (`region`),
  CONSTRAINT `users_ibfk_3` FOREIGN KEY (`role`) REFERENCES `role` (`role`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8

Ho 'region' impostato come chiave esterna su una tabella region - region.region '

Si noti che users.region è dichiarato NULL. Ho avuto l'impressione che in MySQL, un vincolo di chiave esterna sia applicato SOLO se la chiave è impostata su NOT NULL.

Tuttavia, quando provo a inserire un utente con una regione NULL nella mia applicazione PHP, ottengo il seguente errore:

 ERROR: Cannot add or update a child row: a foreign key constraint fails (`reslife4/users`, CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE)

MA, se dovessi aggiungere questo utente al di fuori della mia applicazione PHP, ad esempio in phpMyAdmin, me lo permetterebbe.

Qualcuno sa cosa sta succedendo?

È stato utile?

Soluzione

La tua applicazione inserisce un valore non NULL in region .

Abilita il log delle query e vedi cosa esattamente il tuo PHP cerca di inserire nella tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top