sql >> Databáze >  >> RDS >> Mysql

Jak zachovat omezení cizího klíče v různých databázích?

Nenapadá mě žádný způsob, jak to udělat se standardním MySQL.

Můžete napsat plugin pro MySQL Proxy , který spravuje referenční integritu mezi nadřazenými a podřízenými tabulkami na různých serverech:

  • Zachyťte INSERT a UPDATE proti dětskému stolu. Dotaz na odpovídající řádek v nadřazené tabulce. Selhání INSERT /UPDATE pokud v nadřazené tabulce nebyla nalezena žádná shoda.

  • Zachyťte DELETE proti nadřazené tabulce. Dotaz na závislé řádky v podřízené tabulce. Selhání DELETE pokud byly v podřízené tabulce nalezeny nějaké závislé řádky. Pokud má omezení podporovat kaskádové chování, udělejte to namísto selhání.

  • Zachyťte UPDATE proti nadřazené tabulce. Pokud se hodnota primárního klíče mění v rámci aktualizace, dotazujte se na závislé řádky nalezené v podřízené tabulce. Selhání UPDATE pokud byly v podřízené tabulce nalezeny nějaké závislé řádky. Pokud má omezení podporovat kaskádové chování, udělejte to namísto selhání.

Všimněte si, že byste museli uchovávat informace o omezeních referenční integrity ve vašem pluginu MySQL Proxy (nebo napsat vlastní konfigurační soubor pro váš plugin, který zaznamenává vztahy). Nemůžete použít konvenční FOREIGN KEY syntaxi pro deklarování takových omezení napříč instancemi MySQL.



  1. Dynamický příkaz SQL SELECT s PHP na základě uživatelských možností

  2. Escape raw SQL dotazy v Laravel 4

  3. Jak použít více příkazů WITH v jednom dotazu PostgreSQL?

  4. Failover &Failback na Amazon RDS