Oracle Unique Index

Oracle Unique Index



Databaseytelse er en av de essensielle rollene til en databaseutvikler. Å sikre at databasen din kjører med optimal ytelse kan ha betydelig innvirkning på applikasjonene som leser eller skriver til den databasen.

Selv om det finnes mange måter å forbedre databaseytelsen på, er én funksjon nesten universell for enhver database. Databaseindekser er datastrukturer eller objekter som brukes til å øke hastigheten på datahentingen fra tabellen.

Når de brukes riktig, kan databaseindekser redusere hastigheten på en spørring med nesten halvparten, avhengig av måldata, layout, tilgjengelige ressurser osv.







I denne opplæringen skal du lære hvordan du arbeider med unike indekser i Oracle-databaser for å forhindre tilgjengeligheten av dupliserte verdier i en indeksert kolonne.



Oracle Unique Index

Vi kan bruke en unik indeks for å sikre at ingen dupliserte rader lagres i en gitt kolonne. Hvis kolonnen i en gitt indeks inneholder en unik regel, vil forsøk på å legge til to rader med en lignende verdi i den kolonnen resultere i en feil som indikerer et unikt brudd på begrensninger.



I Oracle kan vi lage en unik indeks ved å bruke CREATE UNIQUE INDEX-setningen som vist i følgende:





LAG UNIK INDEKS indeksnavn PÅ tabellnavn ( kolonner ) ;

Kolonnene som er inkludert i indeksen vil ikke akseptere noen dupliserte rader.

Eksempel på unik tabellillustrasjon

For å demonstrere hvordan du oppretter og bruker en unik indeks, ta følgende tabell:



PLUKKE UT * FROM sample_data;

Produksjon :

Lag en unik indeks på kolonnen Fornavn

Følgende eksempelsetning viser hvordan du oppretter en unik indeks ved å bruke kolonnen fornavn:

opprette unik indeks fornavn_unik på sample_data ( fornavn ) ;

Ved å aktivere denne indeksen kan vi ikke sette inn mer enn én rad med samme fornavn.

Ta for eksempel følgende insert-setning:

sette inn i sample_data ( id , fornavn, ip_adresse, btc_adresse, kredittkort, identifikator )
verdier ( elleve , 'Wallas' , '169.158.70.77' , '1CNz5d1d5SC8SaR6dFSVihwztqYx5Fg77q' , '4017955174552' ,
'26811d77-0a3a-4397-bc33-f7835f7c7ab9' ) ;

Hvis vi kjører den gitte insert-setningen, bør vi få en feilmelding som vist i følgende:

[ 23000 ] [ 1 ] ORA-00001: unik begrensning ( HR.FIRST_NAME_UNIQUE ) krenket

Som vi kan se, bryter innsetting av den gitte verdien den unike begrensningen for kolonnen fornavn.

Lag en unik indeks med to kolonner

Vi kan også ha en unik indeks som består av mer enn én kolonne. I følgende eksempel lager vi en unik indeks ved å bruke fornavn og io_adresse kolonnene:

opprette unike indeksbekreftelseskolonner på sample_data ( fornavn, ip_adresse ) ;

På samme måte vil det å legge til dupliserte verdier for enten fornavn- eller ip_adresse-kolonnen resultere i unike indeksbruddsfeil.

Automatiske unike indekser

Har du noen gang lurt på hva som skjer når du erklærer en tabellkolonne med en primærnøkkel eller unik begrensning?

Enkelt sagt, hvis du angir en kolonne som tabellens primærnøkkel eller tildeler en unik begrensning til en gitt kolonne, oppretter databasemotoren automatisk en unik indeks for den kolonnen.

Dette sikrer at ingen duplikatverdi settes inn i den kolonnen.

Ta for eksempel følgende utsagn:

opprette tabell sample_data
(
id Antall,
fornavn  varchar2 ( femti ) ,
ip_adresse  varchar2 ( tjue ) ,
btc_adresse varchar2 ( femti ) ,
kredittkort varchar2 ( femti ) ,
identifikator  varchar2 ( 40 ) ,
constraint sample_pk primærnøkkel ( id )
) ;

I forrige eksempel lager vi en tabell og setter id-kolonnen som tabellens primærnøkkel. Deretter, for å se den unike begrensningen knyttet til den kolonnen (generert automatisk), kan vi kjøre følgende kommando:

plukke ut indeksnavn, indekstype, synlighet, status, TABLE_NAME
fra alle_indekser der TABLE_NAME = 'EKSEMPELDATA' ;

Resultater :
I dette tilfellet kan vi se den unike indeksen som er opprettet av databasemotoren for id-kolonnen.

Konklusjon

I denne veiledningen lærte du hvordan du oppretter og bruker de unike indeksene i Oracle-databasen. Du har også lært hva som skjer når du tilordner en primærnøkkel eller unik begrensning til en tabellkolonne.