Denne artikel taler om, hvordan man opretter tabel i Oracle, primær nøgle, fremmednøgler, opretter tabelsyntaks i Oracle med eksempler. Dette vil være meget nyttigt for både Oracle DBA'er og udviklere. De leger med det mange gange i løbet af dagen, og god viden kan helt sikkert hjælpe dem med at fremskynde opgaven. De bliver ofte forvirrede over datatypen og hvad de skal bruge under hvilke omstændigheder. Her forsøger jeg at give et overblik over alle de nyttige ting til Oracle-databasetabeller
Hvad er Oracle-databasetabel?
-Tabeller er den grundlæggende enhed for datalagring i en Oracle-database. Data gemmes i rækker og kolonner.
-Et bord rummer alt det nødvendige om noget i den virkelige verden
-En tabel indeholder et sæt kolonner. En kolonne repræsenterer én slags data i tabellen. For eksempel vil lønkolonnen i EMP-tabellen have lønningerne
- En række er en samling af kolonneoplysninger, der svarer til en enkelt post.
Dernæst vil vi tale i detaljer om Oracle create table statement
Sådan opretter du en tabel i oracle
For at oprette en tabel i databasen skal vi have følgende information
- Tabelnavnet
- Tabeltype
- Begrænsninger
- tabellagerparameter
Lad os se på hver af disse i detaljer
Tabelnavnekonventioner for Oracle-opret tabel
- Det navn, du vælger til en tabel, skal følge disse standardregler:
- Navnet skal begynde med bogstavet A-Z eller a-z
- Kan indeholde tal og understregninger
- Kan stå med STORE eller små bogstaver
- Kan være op til 30 tegn lange. Med 12.2 er den blevet udvidet til 128 tegn
- Kan ikke bruge det samme navn på et andet eksisterende objekt i dit skema
- Må ikke være en Oracle-server og et reserveret SQL-ord
- Kolonnenavn, kolonnedatatyper og kolonnestørrelser.
Kolonnenavnekonventioner –
- Det navn, du vælger til en kolonne, skal følge disse standardregler:
- Navnet skal begynde med bogstavet A-Z eller a-z
- Kan indeholde tal og understregninger
- Kan stå med STORE eller små bogstaver
- Kan være op til 30 tegn lang. Med 12.2 er den blevet udvidet til 128 tegn
- Kan ikke bruge det samme navn på et andet eksisterende objekt i dit skema
- Må ikke være en Oracle-server og et reserveret SQL-ord
Tabeltype
Almindelig (heap-organiseret) tabel
-Dette er den grundlæggende, generelle type bord.
-Dens data gemmes som en uordnet samling (heap)
Klynget tabel
-En klynget tabel er en tabel, der er en del af en klynge.
-En klynge er en gruppe af tabeller, der deler de samme datablokke, fordi de deler fælles kolonner og ofte bruges sammen.
Indeksorganiseret tabel
-I modsætning til en almindelig (heap-organiseret) tabel, lagres data for en indeks-organiseret tabel i en B-træ-indeksstruktur på en primær nøglesorteret måde.
-Udover at gemme de primære nøglekolonneværdier i en indeksorganiseret tabelrække, gemmer hver indeksindgang i B-træet også de ikke-nøglekolonneværdier.
Opdelt tabel
–Oracle partitionerede tabeller gør det muligt for dine data at blive opdelt i mindre, mere håndterbare stykker kaldet partitioner eller endda underpartitioner.
- Hver partition kan administreres individuelt og kan fungere uafhængigt af de andre partitioner, hvilket giver en struktur, der bedre kan tilpasses til tilgængelighed og ydeevne.
Ekstern tabel
Oracles eksterne tabeller giver Oracle at forespørge data, der er gemt uden for databasen, i flade filer.
Global midlertidig tabel
Dataene i en global midlertidig tabel er private, således at data indsat af en session kun kan tilgås af den session. De sessionsspecifikke rækker i en global midlertidig tabel kan bevares for hele sessionen eller kun for den aktuelle transaktion
Begrænsninger og regler
Du kan angive regler for hver kolonne i en tabel. Disse regler kaldes integritetsbegrænsninger. Et sådant eksempel er en ikke-nul integritetsbegrænsning. Denne begrænsning tvinger kolonnen til at indeholde en værdi i hver række. Disse regler håndhæves placeret for hver kolonne eller sæt af kolonner. Når bordet deltager i datahandling, valideres disse regler og rejser undtagelser ved overtrædelse.
En begrænsning kan være en af følgende:
- en begrænsning på kolonneniveau
Begrænsninger på kolonneniveau henviser til en enkelt kolonne i tabellen og angiver ikke et kolonnenavn (undtagen kontrolbegrænsninger). De henviser til den kolonne, de følger.
- en begrænsning på tabelniveau
Begrænsninger på tabelniveau henviser til en eller flere kolonner i tabellen. Begrænsninger på tabelniveau angiver navnene på de kolonner, de gælder for. CHECK-begrænsninger på tabelniveau kan henvise til 0 eller flere kolonner i tabellen.
De tilgængelige begrænsningstyper er IKKE NULL, Primary Key, Unique, Check og Foreign Key.
Primær nøgle
En primær nøgle i Oracle er en kolonne i en tabel hvis værdier unikt identificerer rækken i tabellen. En primær nøgleværdi:
a) Skal entydigt identificere rækken;
b) kan ikke have NULL værdier;
Oracle opretter internt et unikt orakelindeks for at forhindre duplikering i kolonneværdierne. Det kan defineres på kolonne- eller tabelniveau
En primær nøgle kan også være flere kolonner
Unik nøgle
Unik nøgle i Oracle betyder unikhed for kolonnen. Oracle-serveren tillader ikke duplikerede værdier i kolonnen med unikke begrænsninger. Oracle opretter internt et unikt indeks for at forhindre duplikering i kolonneværdierne. Men det tillader nogle værdier at være nul. Det kan defineres på kolonne- eller tabelniveau
Udenlandsk nøgle
-En fremmednøgle i Oracle er en referentiel begrænsning mellem to tabeller.
-En fremmednøgle-begrænsning validerer værdierne for en INSERT eller OPDATERING i forhold til værdierne i en anden kolonne, enten i en anden tabel eller en anden kolonne i samme
-En fremmednøgle definerer altid et forældre/barn-forhold. "Overordnet" er den kolonne, der henvises til i den fremmede nøgle, og "barnet" er den eller de kolonner, der indeholder den fremmede nøgle-begrænsning.
-Generelt er en fremmednøgle dog et felt (eller felter), der peger på den primære nøgle i en anden tabel.
-Den kan defineres på kolonne- eller tabelniveau
Tjek begrænsning
En oracle check-begrænsning kræver en værdi i databasen for at overholde en specificeret betingelse. Check constraint tillader at pålægge en betinget regel på en kolonne, som skal valideres, før data indsættes i kolonnen. Betingelsen må ikke indeholde en underforespørgsel eller pseudokolonne CURRVAL NEXTVAL, LEVEL, ROWNUM eller SYSDATE.
Oracle tillader en enkelt kolonne at have mere end én CHECK-begrænsning. Faktisk er der ingen praktisk grænse for antallet af CHECK-begrænsninger, der kan defineres for en kolonne.
Det kan defineres på kolonne- eller tabelniveau
Ikke null
Det betyder, at en datarække skal have en værdi for kolonnen angivet som NOT NULL. Oracle-serveren tillader ikke, at der lagres rækker, der overtræder denne begrænsning. Det kan kun defineres på kolonneniveau og ikke på tabelniveau.
Tabellagringsparameter
Tabeller gemmes i Oracle Tablespace i databasen. Hvis der ikke er angivet noget Tablespace, går tabellen i brugerens standard Tablespace.
Så i nøddeskal
1) Du skal vælge det relevante kolonnenavn og tabelnavn i henhold til standarden ovenfor. Det anbefales at give kolonnenavn og tabelnavn, så du kan identificere formålet ved at markere navnene
2) For det andet skal du vælge den rigtige Oracle-datatype til tabellen.
Hvis det er en tegnstreng, bør vi vælge VARCHAR2 (10). Dette er en variabel streng, vi bør vælge værdien korrekt. Det betyder, at den kan gemme tegn til 10 bytes. Den udnyttede plads vil afhænge af værdierne i kolonnen, og der vil ikke være spild af plads.
Jeg vil her understrege én ting, at når vi giver VARCHAR2(10), her er 10 antallet af bytes, ikke tegnet.
Antallet af tegn og bytes er ens, når ASCII-tegn er involveret, men ligningen bliver ændret, vi begynde at bruge andre tegn end ASCII
Lige nu understøtter VARCHAR2 4000 bytes, hvis din kolonne er større end det, kan du bruge LOB datatype, som kan gemme tekst til GIGA bytes.
Hvis det er et tal, bruger vi datatypen Number. Igen kan vi vælge værdien passende. Eksempelnummer(6,2) Dette kan maksimalt indeholde fra 999999.99
Hvis du vil gemme dato, har Oracle leveret datodatatype til opbevaring.
3) Identificer begrænsningen på bordet. Bestem, hvad der skal være den primære nøgle, og hvad alle kolonner ikke ville være null.
Når vi har alle de nødvendige oplysninger, kan vi gå videre med tabeloprettelse
Opret tabelsyntaks for Oracle
CREATE TABLE table_name ( col1 datatype [ NULL | NOT NULL ], col2 datatype [ NULL | NOT NULL ], ... col_n datatype [ NULL | NOT NULL ] ) tablespace <tablepace name>;
SYNTAX for oracle create Table primærnøgle. Det kan både defineres på kolonneniveau eller tabelniveau
Table level CREATE TABLE table_name ( col1 datatype [ NULL | NOT NULL ], col2 datatype [ NULL | NOT NULL ], ... col_n datatype [ NULL | NOT NULL ] constraint <name> primary key (col1,col2) ) tablespace <tablepace name> Column Level CREATE TABLE table_name ( col1 datatype [ NULL | NOT NULL ] constraint <name> primary key , col2 datatype [ NULL | NOT NULL ], ... col_n datatype [ NULL | NOT NULL ] ) tablespace <tablepace name>
Eksempel af oracle create Table primær nøgle
CREATE TABLE SCOTT.TEST ( Created_by date, SOURCE CHAR(10), REQUEST_ID CHAR(64) NOT NULL CONSTRAINT TEST_PK PRIMARY KEY, COMMENTS VARCHAR(3000) ); CREATE TABLE TESTEXP ( INV_ID CHAR(7) NOT NULL, ITEM_ID CHAR(7) NOT NULL, CREATED date, WHO CHAR(7), CONSTRAINT TEST1_PK PRIMARY KEY (INV_ID,ITEM_ID) );
Oracle opret indeks for at håndhæve de primære nøglebegrænsninger
Relateret:Spørgsmål til Oracle-interview
Forklaringen til tabel TEST1
1 | Den første kolonne hedder inv_id som er oprettet som en char-datatype (maksimalt 7 cifre i længden) og ikke kan indeholde null-værdier |
2 | Den anden kolonne hedder item_id som er oprettet som en char-datatype (maksimalt 7 cifre i længden) og ikke kan indeholde null-værdier |
3 | Den tredje kolonne kaldes oprettet som er en dato datatype og kan også indeholde null-værdier. |
4 | Den fjerde kolonne kaldes who som er en char-datatype og også kan indeholde null-værdier. |
5 | Tabelniveau primærnøglebegrænsning TEST1_PK er defineret på den sammensatte nøgle (INV_ID, ITEM_ID) |
SYNTAX for oracle opret tabelsætning UDENLANDSKE nøgle. Det kan både defineres på kolonneniveau eller tabelniveau
CREATE TABLE table_name ( col1 datatype [ NULL | NOT NULL ], col2 datatype [ NULL | NOT NULL ], ... col_n datatype [ NULL | NOT NULL ] constraint <name> FOREIGN KEY (col1,col2) REFERENCES table(col1,col2) ) tablespace <tablepace name> CREATE TABLE table_name ( col1 datatype [ NULL | NOT NULL ] constraint <name> primary key , col2 datatype [ NULL | NOT NULL ], ... col_n datatype [ NULL | NOT NULL ] ) tablespace <tablepace name>; CREATE TABLE dept ( dept_id number(10) NOT NULL, dept_name varchar2(50) NOT NULL, CONSTRAINT dept_pk PRIMARY KEY (dept_id) ); CREATE TABLE emp ( emp_no number(10) NOT NULL, emp_name varchar2(50) NOT NULL, dept_id number(10), sal number(6), CONSTRAINT emp_pk PRIMARY KEY (emp_no), CONSTRAINT dept_fk FOREIGN KEY (dept_id) REFERENCES dept(dept_id) );
Forklaring til tabel EMP
1 | Den første kolonne hedder EMP_NO som er oprettet som et tal og ikke kan indeholde null-værdier |
2 | Den anden kolonne hedder emp_name som er oprettet som varchar2(50) og ikke kan indeholde null-værdier |
3 | Den tredje kolonne hedder dept_id som er et tal. |
4 | Den fjerde kolonne hedder sal som er en taldatatype og også kan indeholde nulværdier. |
5 | Tabelniveau primær nøglebegrænsning EMP_PK er defineret på nøglen (EMP_NO) |
6 | Tabelniveau udenlandske nøglebegrænsninger dept_fk som refererer til dept tabel dept_id |
Privilegium påkrævet for at Oracle kan oprette tabel
-Du skal have privilegiet oprette tabelsystem for at oprette en ny tabel i dit skema,
- Du skal have rettighederne til at oprette et hvilket som helst tabelsystem for at at oprette en tabel i en anden brugers skema, desuden skal ejeren af tabellen have en kvote for det tablespace, der indeholder tabellen, eller UBEGRÆNSET TABLESPACE-systemprivilegiet li>
Relateret:Sådan skriver man sql-forespørgsler
Andre egenskaber forbundet med Oracle-databasetabellen
Cache/ingen cache
Brug CACHE-sætningerne til at angive, hvordan Oracle Database skal gemme blokke i buffercachen. Hvis du ikke angiver noget i create table-kommandoen, er det som standard no-cache
STANDARD
Værdien indsat i kolonnen, hvis indsættelsen eller opdateringen ville efterlade kolonneværdien NULL.
PARALLEL
Angiv PARALLEL, hvis du ønsker, at Oracle skal vælge en grad af parallelitet svarende til antallet af tilgængelige CPU'er på alle deltagende forekomster gange værdien af initialiseringsparameteren PARALLEL_THREADS_PER_CPU.
Komprimer
Dette bruges af oraklet til at gemme tabellen i komprimeret format. Dette er tilgængeligt fra 11g og frem
Kommenter en tabel eller kolonne
Du kan kommentere tabellen ved hjælp af kommandoen
COMMENT ON TABLE <table_name> IS '<comment>';
Oracle-opret tabel med standardværdi
Nogle gange vil du tildele en standardværdi til kolonnen, hvis den ikke er angivet i insert-sætningen, så kan du oprette tabellen med nedenstående syntaks. DEFAULT er det anvendte søgeord
CREATE TABLE EXP ( NAME VARCHAR2(20), SAL number(8,2) DEFAULT 800, hire_date DATE DEFAULT SYSDATE , birthdate DATE DEFAULT SYSDATE -10 )
Oracle opret tabel standardværdiændringer i 12c
IDENTITY-kolonner
I Oracle Database 12c kan vi definere tabelkolonner med SQL-nøgleord IDENTITY, som er et SQL-nøgleord fra American National Standards Institute (ANSI). Som øges automatisk på tidspunktet for indsættelse (som i MySQL).
Example: create table test ( id number generated as identity, name varchar2(100), email varchar2(100), password varchar2(100), firstname varchar2(100), lastname varchar2(100) );
Sequence as Default Value With Oracle Database 12c, we can directly assign sequence nextval as a default value for a column, So you no longer need to create a trigger to populate the column with the next value of sequence, you just need to declare it with table definition.It is a sort of auto-increment feature for a column in oracle just like MySQL
Example: create sequence tech_test_seq start with 1 increment by 1 nocycle;create table test ( id number default tech_test_seq.nextval primary key name varchar(30) );
Standardværdier kun for metadata
Inden før Oracle 11g krævede tilføjelse af en ny kolonne til en eksisterende tabel, at alle rækker i den tabel blev ændret for at tilføje den nye kolonne. Så hvis bordet er meget stort, tog ændring af tabel tilføjelse af kolonne en betydelig tid og låsetid som også mere
Med Oracle introducerede 11g konceptet med standardværdier, der kun er metadata. Tilføjelse af en NOT NULL-kolonne med en DEFAULT-sætning til en eksisterende tabel involverede kun en metadataændring, snarere end en ændring af alle rækkerne i tabellen. Forespørgsler i den nye kolonne blev omskrevet af optimeringsværktøjet for at sikre, at resultatet var i overensstemmelse med standarddefinitionen.
Læs mere om det i nedenstående artikel
Sådan ændres tabel tilføje kolonne oracle
Oracle 12c tager dette et skridt videre og tillader kun metadata standardværdier for både obligatoriske og valgfrie kolonner. Som et resultat heraf vil tilføjelse af en ny kolonne med en DEFAULT-sætning til en eksisterende tabel blive håndteret som en metadata-ændring, uanset om den kolonne er defineret som NOT NULL eller ej.
Dette er en kæmpe fordel for alle.
Dataordbogstabeller og -visninger
Alle tabel- og kolonneoplysninger gemmes i SYS.TAB$- og SYS.COL$-tabeller. Oracle har leveret dataordbogsvisninger for at få oplysninger om tabeller og kolonner
Der er tre kategorier af visninger
Sådan vises alle tabeller i Oracle
To list all tables owned by the current user, type: select tablespace_name, table_name from user_tables; To list all tables in a database: select tablespace_name, table_name from dba_tables; To list all tables accessible to the current user, type: select tablespace_name, table_name from all_tables To describe the table in SQLPLUS desc <table_name>
Sådan bestemmes tabelstørrelsen
select owner as "Schema" , segment_name as "Object Name" , segment_type as "Object Type" , round(bytes/1024/1024,2) as "Object Size (Mb)" , tablespace_name as "Tablespace" from dba_segments where segment_name=’<table_name>’;
Tabeller med antal rækker og kommentarer
Nedenstående forespørgsel kan bruges til at finde antallet af rækker og kommentarer i SCOTT-skemaet
select tab.owner as schema_name,
tab.table_name as table_name,
obj.created,
obj.last_ddl_time as last_modified,
tab.num_rows,
tab.last_analyzed,
comm.comments
from all_tables tab
inner join all_objects obj
on obj.owner = tab.owner
and obj.object_name = tab.table_name
left outer join all_tab_comments comm
on tab.table_name = comm.table_name
and tab.owner = comm.owner
where tab.owner = 'SCOTT'
order by tab.owner,
tab.table_name;
Ofte stillede spørgsmål om Oracle-oprettelsestabel
1. Har oracle oprettet eller erstattet tabel-oracle-kommando?
Oracle har ikke oprette eller erstatte tabel-oracle-kommando. Opret eller erstat er kun gyldig for visninger, PLSQL:kun procedurer. Du skal kun foretage ændringen ved at bruge ALTER Table-kommandoen
Eller du kan udtrykkeligt slippe tabellen og oprette den igen
vi har ikke nogen direkte, men du kan bruge PLSQL til at efterligne det
SÆT SERVEROUTPUT PÅ
DECLARE c_emp int:=0;
BEGIN SELECT count(*) ind i c_emp FROM dba_tables hvor tabelnavn ='EMP';
hvis c_emp<=0
UDFØR STRAKS 'opret tabel EMP ( ID NUMMER(3), NAVN VARCHAR2( 30) NOT NULL,SAL NUMBER*,2))';
end if;
END;
/
Eksempelskema til praksis
SQL>CREATE TABLE "DEPT" ( "DEPTNO" NUMBER(2,0), "DNAME" VARCHAR2(14), "LOC" VARCHAR2(13), CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") ) SQL>CREATE TABLE "EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "DEPT" ("DEPTNO") ENABLE ); SQL> desc emp Name Null? Type ----------------------------------------- -------- ----------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> SQL> desc dept Name Null? Type ----------------------------------------- -------- ----------------------- DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13) SQL> insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK'); insert into dept values(20, 'RESEARCH', 'DALLAS'); insert into dept values(30, 'RESEARCH', 'DELHI'); insert into dept values(40, 'RESEARCH', 'MUMBAI'); insert into emp values( 7698, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 ); insert into emp values( 7782, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 ); insert into emp values( 7788, 'Scott', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 ); insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null ); insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 ); insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null ); SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7698 BLAKE MANAGER 7839 01-MAY-07 2850 10 7782 CLARK MANAGER 7839 09-JUN-08 2450 10 7788 SCOTT ANALYST 7566 09-JUN-12 3000 20 7789 TPM ANALYST 7566 09-JUN-17 3000 7790 TOM ANALYST 7567 09-JUL-17 4000 7560 T1OM ANALYST 7567 09-JUL-17 4000 20 After the practice is over, you can drop the tables SQL>drop table emp; SQL>drop table dept;
Håber du kan lide denne artikel om oracle oprette tabelsætning, kommando, syntaks og tips.
Relaterede artikler
ændre tabel tilføje kolonne orakel :Nyttig indsigt i, hvordan man ændre tabel tilføje kolonne orakel. Detaljer om hurtig tilføjelse af kolonne-funktion introduceret i Oracle 11g også givet
DROP TABLE ORACLE :Lær om drop table i Oracle, Drop table, hvis det findes i Oracle, slip flere tabeller i én kommando, drop table cascade constraints
alter table move :Tjek dette indlæg for trin for trin metoden om hvordan man genopbygger bordet i Oracle ved hjælp af alter table move, hvordan man genopbygger bord med lobs, lang kolonne
Truncate TABLE Oracle :Truncate TABLE i Oracle er hurtigere end slet fra bordet i oracle. Det er DDL-sætning, og det udløser ikke slettetriggerne
Alter Table i Oracle:Ændre tabel i Oracle bruges til at ændre en kolonne, slippe og tilføje begrænsninger, ændre datatypen for tabelkolonnen, ændre tabellen lagringsparametre
oracle lister alle tabeller:vi kan få listen over alle tabeller i Oracle ved enten at forespørge alle_tabeller eller brugertabeller eller dba_tabeller. vi kan vælge kolonnen og hvor-klausulen efter behov
Supplerende login Oracle
oracle sql-datofunktioner
https://docs.oracle.com/cd/B19306_01/server.102/ b14231/tables.htm
Oprettelse af en global midlertidig tabel i Oracle