sql >> Databáze >  >> RDS >> Oracle

jak vložit cizí klíč do tabulky

Nejsem si úplně jistý, co máte na mysli „nesprávným zadáním ID“, ale předpokládám, že máte na mysli ID, které není platné, spíše než pouhou chybu (jako když řeknete, že někdo je v jiném městě, než kde skutečně jsou).

Omezení cizího klíče znamená, že hodnotu zadávají do person tabulka pro city_id existovat jako primární klíč v city stůl. Nemohou vložit žádnou starou hodnotu jako city_id , pouze platné hodnoty. A odpovídající city řádek pak nelze smazat bez odstranění/změny odkazu v person tabulky (např. aktualizace na jinou platnou hodnotu), nebo - v tomto případě nepravděpodobné - kaskádové mazání tak, aby jakákoli person záznamy pro city jsou smazány.

Řekněme, že vytvoříte své tabulky jako:

create table city (id number primary key, code varchar2(2), name varchar2(30));

create table person (id number, name varchar2(30), last_name varchar2(30),
    city_id number not null references city(id));

Ve vašem city máte tři záznamy tabulka:

insert into city (id, name) values (1, 'New York');
insert into city (id, name) values (2, 'London');
insert into city (id, name) values (3, 'Paris');

Poté můžete přidat person který žije v New Yorku uvedením ID tohoto města:

insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);

(SQL Fiddle )

Nedenormalizujete data v odpovídajícím city záznam, takže pokud by se New York rozhodl změnit svůj název zpět na Nový Amsterdam, řekněme, šlo by o jedinou aktualizaci city záznam a nemuseli byste se dotknout žádné person záznamy pro lidi v daném městě.

Pokud jste se pokusili smazat city záznam pro New York, zobrazí se chyba (ORA-02292), která říká, že existuje podřízený záznam. Můžete aktualizovat person záznam mít city_id 2 nebo 3, a pak by bylo možné smazat New York. Myšlenka je taková, že to nemůžete udělat náhodou a nechat po sobě osiřelá data – person_id ukazující na city který již neexistuje.

Pokud jste se pokusili vytvořit person záznam s city_id hodnota, která neodpovídá city.id hodnota:

insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);

... pak byste dostali chybu (ORA-02291), že nadřazený klíč – tedy odpovídající id hodnotu v city tabulky – neexistuje.

Další informace o cizích klíčích si můžete přečíst v koncepty databáze průvodce .



  1. Smazat pomocí Join v Oracle SQL Query

  2. Woocommerce:Uživatelé mohou koupit produkt pouze jednou

  3. SQLAlchemy:Vytvořte odstraňovací dotaz pomocí self-join na MySQL

  4. Vyčištění pole telefonních čísel v mySql