Alhazred
24-01-2011, 23:19
Creo due tabelle in questo modo
create table localita (
nome varchar(255) PRIMARY KEY
);
INSERT INTO localita VALUES ('Roma');
INSERT INTO localita VALUES ('Milano');
INSERT INTO localita VALUES ('Venezia');
create table zone (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nome varchar(255),
localita varchar(255)
);
ALTER TABLE zone ADD CONSTRAINT FK_zone FOREIGN KEY (localita) REFERENCES localita(nome) ON UPDATE CASCADE;
INSERT INTO zone (nome,localita) VALUES ('Testaccio','Roma');
INSERT INTO zone (nome,localita) VALUES ('Trastevere','Roma');
INSERT INTO zone (nome,localita) VALUES ('EUR','Roma');
INSERT INTO zone (nome,localita) VALUES ('Fiera','Milano');
Se ora modifico la tabella "localita" cambiando ad esempio "Roma" in "Roma (RM)" con una query UPDATE, il nome della località cambia, ma sulla tabella "zone" non c'è effetto, benché sia impostato un "ON UPDATE CASCADE".
Altra anomalia è che se modifico il campo "localita" della tabella "zone" con un nome non presente nella tabella "localita", il db me lo lascia fare tranquillamente.
In pratica è come se non avessi impostato la foreign key.
Cosa mi sfugge?
create table localita (
nome varchar(255) PRIMARY KEY
);
INSERT INTO localita VALUES ('Roma');
INSERT INTO localita VALUES ('Milano');
INSERT INTO localita VALUES ('Venezia');
create table zone (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nome varchar(255),
localita varchar(255)
);
ALTER TABLE zone ADD CONSTRAINT FK_zone FOREIGN KEY (localita) REFERENCES localita(nome) ON UPDATE CASCADE;
INSERT INTO zone (nome,localita) VALUES ('Testaccio','Roma');
INSERT INTO zone (nome,localita) VALUES ('Trastevere','Roma');
INSERT INTO zone (nome,localita) VALUES ('EUR','Roma');
INSERT INTO zone (nome,localita) VALUES ('Fiera','Milano');
Se ora modifico la tabella "localita" cambiando ad esempio "Roma" in "Roma (RM)" con una query UPDATE, il nome della località cambia, ma sulla tabella "zone" non c'è effetto, benché sia impostato un "ON UPDATE CASCADE".
Altra anomalia è che se modifico il campo "localita" della tabella "zone" con un nome non presente nella tabella "localita", il db me lo lascia fare tranquillamente.
In pratica è come se non avessi impostato la foreign key.
Cosa mi sfugge?