problemino con FKs

Ciao Gianni sto avendo dei problemi con le foreign keys, in pratica ho una tabella annunci che ha piu o meno questi campi :

id

autore

località

genere

poi c'è la tabella utenti

che ha pressappoco sti campi :

id

nome

pass

ora con questa query : ALTER TABLE `users` ADD CONSTRAINT `Author` FOREIGN KEY `Author` (`id`)     REFERENCES `announces` (`author`)     ON DELETE SET NULL     ON UPDATE CASCADE;

il problema è che non funziona ... cioè quando vado ad eliminare un record da utenti gli annunci rimangono o mi da un errore...

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

quello che devo fare io è settare a 0 tutti gli annunci ai quali è stato rimosso l'utente ... solo che non ci sto riuscendo, le tabelle sono queste :

CREATE TABLE  `announces` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) NOT NULL,
  `creationdate` int(10) unsigned NOT NULL,
  `author` int(10) unsigned default NULL,
  `location` int(10) unsigned NOT NULL default '0',
  `tipology` int(10) unsigned NOT NULL default '0',
  `specs` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `Author` (`author`)
) ENGINE=InnoDB

CREATE TABLE  `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) NOT NULL,
  `pass` varchar(45) NOT NULL,
  `mail` varchar(45) NOT NULL,
  `personal` int(10) unsigned NOT NULL,
  `lastlogin` int(10) unsigned NOT NULL,
  `regdate` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB
risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

per settare a zero intendi mettere null il campo autore degli annunci relativi all'autore cancellato?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

si, esatto!

CREATE TABLE  `announces` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) NOT NULL,
  `creationdate` int(10) unsigned NOT NULL,
  `author` int(10) unsigned default NULL,
  `location` int(10) unsigned default NULL,
  `tipology` int(10) unsigned default NULL,
  `specs` int(10) unsigned default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;
CREATE TABLE  `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) NOT NULL,
  `pass` varchar(45) NOT NULL,
  `mail` varchar(45) NOT NULL,
  `personal` int(10) unsigned NOT NULL,
  `lastlogin` int(10) unsigned NOT NULL,
  `regdate` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

creazione della FK

ALTER TABLE `users` ADD CONSTRAINT `announces_author` FOREIGN KEY `announces_author` (`id`)
    REFERENCES `announces` (`author`)
    ON DELETE SET NULL
    ON UPDATE CASCADE;

errore : 1005 can't create table ..\.. .frm error 105

 :bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
modificato 9 anni fa
X 0 X

alter table `announces` add constraint `FK_announces` foreign key(`author`)references `users` (`id`) on delete set null

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

in questo modo se un utente viene eliminato i suoi annnunci vengono settati con author : null, vero?

grazie Gianni!

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

in questo modo se un utente viene eliminato i suoi annnunci vengono settati con author : null, vero?

grazie Gianni!

si, è la tabella degli annunci che deve avere una FK verso la tabella degli utenti, non viceversa.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ok,era proprio questo che mi fregava, ora sono partito a razzo e procedo ad aggiungere le altre FK per le descrizioni,immagini,prezzi e prenotazioni :D

grazie mille Gianni!!!

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda