Newsgroup: it.comp.software.database
Titolo: Problemi con ALTER TABLE

Salve,
Ho le seguenti tabelle :
CREATE TABLE `fornitori` (
  `codice` int(5) NOT NULL auto_increment,
  `descrizione` varchar(30) default NULL,
  `descrizione2` varchar(30) default NULL,
  `via` varchar(30) default NULL,
  `citta` varchar(30) default NULL,
  `provincia` char(3) default NULL,
  `cap` varchar(5) default NULL,
  `tel_1` varchar(15) default NULL,
  `tel_2` varchar(15) default NULL,
  `codice_fiscale` varchar(16) default NULL,
  `piva` varchar(11) default NULL,
  `email` varchar(30) default NULL,
  `web` varchar(30) default NULL,
  `note` text,
  `pagamento` char(2) default NULL,
  `flag_bricofer` char(1) default NULL,
  PRIMARY KEY  (`codice`),
  KEY `pagamento` (`pagamento`),
  CONSTRAINT `fornitori_ibfk_1` FOREIGN KEY (`pagamento`) REFERENCES
`PAGAMENTI` (`codice`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `reclamo` (
  `protocollo` int(5) NOT NULL auto_increment,
  `data_reclamo` date default NULL,
  `pagine` tinyint(4) default NULL,
  `ditta` varchar(5) default NULL,
  `n_fattura` varchar(8) default NULL,
  `data_fattura` date default NULL,
  `n_ddt` varchar(8) default NULL,
  `data_ddt` date default NULL,
  `totale_euro` float default NULL,
  `soluzione` tinyint(4) default NULL,
  `stato` char(1) default 'A',
  PRIMARY KEY  (`protocollo`),
  KEY `ditta` (`ditta`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
se provo a fare: 
alter table reclamo add constraint fornitori_reclamo foreign key (ditta)
references fornitori(codice) on delete restrict on update cascade;
ottengo
ERROR 1005 (HY000): Can't create table
'./Gestionale/#sql-d00_15.frm' (errno: 150)
Perché?
Grazie a tutti.
-- 
Benedetto Santarella 
www.ferramentatodisco.it

 Perché?
Ciao
Usi MySQL ?
Per produrre codice da inserire on line in 
sqlzoo.net/create
 ho dovuto
togliere il riferimento a Pagamenti, come segue:
----
CREATE TABLE `fornitori` (
  `codice` int(5) NOT NULL auto_increment,
  `descrizione` varchar(30) default NULL,
  `descrizione2` varchar(30) default NULL,
  `via` varchar(30) default NULL,
  `citta` varchar(30) default NULL,
  `provincia` char(3) default NULL,
  `cap` varchar(5) default NULL,
  `tel_1` varchar(15) default NULL,
  `tel_2` varchar(15) default NULL,
  `codice_fiscale` varchar(16) default NULL,
  `piva` varchar(11) default NULL,
  `email` varchar(30) default NULL,
  `web` varchar(30) default NULL,
  `note` text,
  `pagamento` char(2) default NULL,
  `flag_bricofer` char(1) default NULL,
  PRIMARY KEY  (`codice`),
  KEY `pagamento` (`pagamento`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `reclamo` (
  `protocollo` int(5) NOT NULL auto_increment,
  `data_reclamo` date default NULL,
  `pagine` tinyint(4) default NULL,
  `ditta` varchar(5) default NULL,
  `n_fattura` varchar(8) default NULL,
  `data_fattura` date default NULL,
  `n_ddt` varchar(8) default NULL,
  `data_ddt` date default NULL,
  `totale_euro` float default NULL,
  `soluzione` tinyint(4) default NULL,
  `stato` char(1) default 'A',
  PRIMARY KEY  (`protocollo`),
  KEY `ditta` (`ditta`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
alter table reclamo add constraint fornitori_reclamo foreign key (ditta)
references fornitori(codice) on delete restrict on update cascade;
----
... l'ultimo comando mi da' lo stesso errore che dici tu.
Ho provato a sostituire la definizione di tabella con:
----
CREATE TABLE `fornitori` (
  `codice` varchar(5) default NULL,
  `descrizione` varchar(30) default NULL,
  `descrizione2` varchar(30) default NULL,
  `via` varchar(30) default NULL,
  `citta` varchar(30) default NULL,
  `provincia` char(3) default NULL,
  `cap` varchar(5) default NULL,
  `tel_1` varchar(15) default NULL,
  `tel_2` varchar(15) default NULL,
  `codice_fiscale` varchar(16) default NULL,
  `piva` varchar(11) default NULL,
  `email` varchar(30) default NULL,
  `web` varchar(30) default NULL,
  `note` text,
  `pagamento` char(2) default NULL,
  `flag_bricofer` char(1) default NULL,
  PRIMARY KEY  (`codice`),
  KEY `pagamento` (`pagamento`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
----
ed il comando incriminato non da' piu' errore.
Il problema e` che sembra che ci voglia esattamente la stessa
definizione di colonna tra colonne referenziate.
Cleanup:
----
drop table fornitori ;
drop table reclamo ;
----
Ciao