MySQL adatköltöztetés
Hari,
MySQL 5.0.67-0ubuntu6
adott egy adatbázis 10-12 adattáblával borzalmasan szervezetlenül és teljesen összevissza. Az adatbázis egy webshop rendszeres vevőinek az adatait tartalmazza a szolgáltatás jelenleg is el.
Az adatbázist teljesen át kell strukturálni. Készítettem egy új AB sémát. Az az elképzelésem, hogy fogom és INSERT INTO SELECT utasításokkal átpumpálom a jelenlegi adatokat az új struktúrába es utána mar nem kell a régivel foglalkoznom. Arra gondoltam meg, hogy triggerek segítségével gondoskodom arról, hogy ha a szolgáltatás bizonyos részei meg a régi adatbázis sémával dolgoznak akkor az ottani módosítások automatikusan belekerüljenek az újba is.
Ott akadtam fenn, hogy az adatok áttöltése nem akar elindulni. Pl a régi tábla a user az új tábla az uj_userek. (Ebben mondjuk nem változik a struktúra, de ez most itt nem számít)Erre ezt kapom:
A usercsoportok táblában egyenlőre egyetlen rekord van, aminek id-je 1. A SELECT utasításban ezt az 1-et manuálisan írom be, a régi táblában szereplő usercsoport_id adatok használhatatlanok.
Tehát ha jól láttam, hogy hogyan is kell ezt megcsinálni akkor a foreign key constraintnak teljesülnie kellene, hiszen megkapja az 1-et ami egy létező id a kapcsolt táblában.
De úgy néz ki mégsem jól latom mert nem megy. Mi a gondja?
■ MySQL 5.0.67-0ubuntu6
adott egy adatbázis 10-12 adattáblával borzalmasan szervezetlenül és teljesen összevissza. Az adatbázis egy webshop rendszeres vevőinek az adatait tartalmazza a szolgáltatás jelenleg is el.
Az adatbázist teljesen át kell strukturálni. Készítettem egy új AB sémát. Az az elképzelésem, hogy fogom és INSERT INTO SELECT utasításokkal átpumpálom a jelenlegi adatokat az új struktúrába es utána mar nem kell a régivel foglalkoznom. Arra gondoltam meg, hogy triggerek segítségével gondoskodom arról, hogy ha a szolgáltatás bizonyos részei meg a régi adatbázis sémával dolgoznak akkor az ottani módosítások automatikusan belekerüljenek az újba is.
Ott akadtam fenn, hogy az adatok áttöltése nem akar elindulni. Pl a régi tábla a user az új tábla az uj_userek. (Ebben mondjuk nem változik a struktúra, de ez most itt nem számít)
INSERT INTO uj_userek
( id, usercsoport_id, nev, email, jelszo, created, modified, telefon, szamla, szamlanev, szamlacim, sumrendelesdarab, sumrendelesosszeg )
SELECT user.id, 1, user.nev, user.email, user.jelszo, user.reg_date, user.last_login, user.telefon, user.szamla, user.sznev, user.szcim, user.rendeles_db, user.rendeles_ossz
FROM user
#1452 - Cannot add or update a child row: a foreign key constraint fails (`akarmidb/uj_userek`, CONSTRAINT `fk_userek_usercsoportok` FOREIGN KEY (`usercsoport_id`) REFERENCES `usercsoportok` (`id`))
A usercsoportok táblában egyenlőre egyetlen rekord van, aminek id-je 1. A SELECT utasításban ezt az 1-et manuálisan írom be, a régi táblában szereplő usercsoport_id adatok használhatatlanok.
Tehát ha jól láttam, hogy hogyan is kell ezt megcsinálni akkor a foreign key constraintnak teljesülnie kellene, hiszen megkapja az 1-et ami egy létező id a kapcsolt táblában.
De úgy néz ki mégsem jól latom mert nem megy. Mi a gondja?
Megvan. Azért, hogy jól
Azért, hogy jól elkülönüljenek a régi és az új AB táblák az új-hoz rendeltem egy előtagot, viszont a foreign key-ekben elfelejtettem a hivatkozásokat módosítani, így nem létező adattáblákra hivatkozik.