ugrás a tartalomhoz

MySQL adatköltöztetés

rrd · 2008. Nov. 21. (P), 19.12
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)
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
Erre ezt kapom:
#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?
 
1

Megvan. Azért, hogy jól

rrd · 2008. Nov. 22. (Szo), 11.23
Megvan.

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.