Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

merge due database mysql

16 views
Skip to first unread message

lad...@gmail.com

unread,
May 2, 2015, 7:24:13 AM5/2/15
to
ciao a tutti, io ho la necessità di dover unire piu databse mysql in uno solo, ovviamente tutti i database hanno la stessa struttura, questa operazione la devo pero' fare ogni giorno, per avere un database aggiornato con tutte le modifiche di tutti gli altri.


pensavo di farlo tramite script, con qualcosa di simile:


REPLACE INTO sa.anagrafica
SELECT * FROM 2.anagrafica
where modified_ts > today ;



il problema è che ho un altra tabella (OGGETTI) struttirata cosi:
ID E OGGETTO

un altra (OGGANAG) in cui ho:
ID_ANAG
ID_OGGETTO

per memorizzare per ogni tizio gli oggetti posseduti.


quando eseguo quella query mi da un errore di foreign key, ma sincerament non capisco perche... il dato ID_OGGETTO della tabella OGGANAG è un dato presente nella tabella OGGETTI.

l'errore che mi da è:

errore sql 1451: cannot delete or update a parent row:
s2.ogganag, constraint fk_ogganag_anagrafica foreignkey(IDANAG) references anagrafica(ID)



ho provato ad eliminare la foreign key e allora funziona.. pero' non posso levarla, mi serve...
ma non capisco perche debba darmi quel'errore... potete aiutarmi?

grazie..

Raffaele Tannone

unread,
May 2, 2015, 9:21:20 PM5/2/15
to
Il Sat, 02 May 2015 04:24:12 -0700, ladius ha scritto:

> ciao a tutti, io ho la necessità di dover unire piu databse mysql in uno
> solo, ovviamente tutti i database hanno la stessa struttura
>
> pensavo di farlo tramite script, con qualcosa di simile:
>
> REPLACE INTO sa.anagrafica SELECT * FROM 2.anagrafica
> where modified_ts > today ;
>
> il problema è che ho un altra tabella (OGGETTI) struttirata cosi:
> ID E OGGETTO
>
> un altra (OGGANAG) in cui ho:
> ID_ANAG ID_OGGETTO
>
> quando eseguo quella query mi da un errore di foreign key, ma
> sincerament non capisco perche... il dato ID_OGGETTO della tabella
> OGGANAG è un dato presente nella tabella OGGETTI.
>
> l'errore che mi da è:
>
> errore sql 1451: cannot delete or update a parent row:
> s2.ogganag, constraint fk_ogganag_anagrafica foreignkey(IDANAG)
> references anagrafica(ID)
>
> ma non capisco perche debba darmi quel'errore... potete aiutarmi?

L' errore non e' tra la tabella tra OGGETTI (parent) e la tabella OGGANAG
(children) ma, come recita il messaggio di errore tra la tabella OGGANAG
(parent) e la tabella ANAGRAFICA (children) oggetto del comando REPLACE.

Dalla documentazione MySql
(https://dev.mysql.com/doc/refman/5.0/en/replace.html) leggo:

MySQL uses the following algorithm for REPLACE (and LOAD DATA ...
REPLACE):

Try to insert the new row into the table

While the insertion fails because a duplicate-key error occurs for a
primary key or unique index:

Delete from the table the conflicting row that has the duplicate
key value

Try again to insert the new row into the table

Questo significa che vuole cancellare un record di ANAGRAFICA per poi
inserirlo dalla omonima tabella ma non puo' farlo in quanto è parent di
uno o piu' record della tabella OGGANAG.

Saluti.

Andrea Frigerio

unread,
May 4, 2015, 11:57:40 AM5/4/15
to
Al momento ho "risolto" levando le foreign key... non che la cosa mi piaccia ma non trovo altre soluzioni rapide :-|...

pero' ho un altro problema non indifferente.


la tabella anagrafica ha come chiave il campo ID che è un autoincrement e la tabella OGGANAG ha dentro ID_ANAG.



siccome il merge devo farlo giornalmente con 5 database in cui verranno aggiunti sempre record in ANAGRAFICA, e di conseguenza in OGGANAG...

mi sa che puo' capitare quanto segue:

faccio merge e rimonto il database mergiato su tutti i database locali.
ultimo ID inserito in anagrafica = 1000

primo database:
aggiungo un record anagrafica:
quindi :
ID = 1001
nome = antonio

lego gli oggetti BOTTIGLIA e TAPPO ad antonio:
quindi in OGGANAG avrò:
1001-tappo;
1001-bottiglia


database numero due:
aggiungo un record in angrafica e avrò cmq :
ID = 1001
NOME = GIANFRANCO

ora a gianfranco associo gli oggetti MOUSE e FOGLIO:
1001-MOUSE
1001-FOGLIO.


con la procedura cosi com'e' credo che in anagrafica avrà solamente uno dei due
o gianfranco e antonio..... essendo campo ID in chiave?

cioe immagino inserisca il primo..poi al secondo faccio l'update...


qualche consiglio su come possa fare ad evitare questa cosa?


grazie ^_^
0 new messages