Jos mulla on vaikka kaksi taulua "Artisti" ja "Levy". Levy-taulun viiteavain viittaa Artisti-taulun pääavaimeen. Tauluja käsitellään GUI:n kautta. Kun suorítetaan poistokäsky DELETE FROM Artisti WHERE artisti_nro=?, tuossa samassa käskyssä pitäisi siis poistaa Levy-taulusta viittaukset tohon Artisti-taulun dataan. CASCADE ei pelitä, se Levy-taulusta poisto pitäisi siis tohon samaan käskyyn ympätä.
Apina ei nyt keksinyt äkkiseltään tohon kunnolla toimivaa ratkaisua. Jeesatkaa vähän.
mikä tietokanta? miksi CASCADE DELETE sääntö ei pelitä?
Ei vaan toimi tossa MySQL-kannan versiossa DELETE CASCADE. En muista tietokannan versiota.
SELECT VERSION();
4.0.24_Debian-10-log
Minkä takia ei voi suorittaa kahta eri SQL-lausetta? Ei se ole sen hitaanpaa ja jos sen tekee transaktion sisällä ei tule mitään muutakaan ongelmaa.
DELETE FROM levy WHERE artisti_nro=?; DELETE FROM artisti WHERE artisti_nro=?;
Snifferi kirjoitti:
Ei vaan toimi tossa MySQL-kannan versiossa DELETE CASCADE. En muista tietokannan versiota.
Mysql:n versio 3.23.44 ja ylöspäin on toiminut nuo FK säännöt. Epäilempä että sinulla on käytössä MyISAM - engine tietokannassa ? (säännöt toimivat INNODB - enginen kanssa)
En nyt pääse kotoa siihen kantaan kiinni, mutta ainakin taulut on
INNODB -muotoa. En mä ihan tarkkaan tiedä, mitä se edes tarkottaa?
Mutta osaisko joku kertoa, kuinka tuo poisto tehdään yhdellä Sql-lauseella käyttäen taulujen yhdistämisehtoa?
FooBat, oon kokeillut tota sun ehdotusta, mutta ei...
Aihe on jo aika vanha, joten et voi enää vastata siihen.