Den här artikeln talar om hur man skapar tabell i Oracle, primärnyckel, främmande nycklar, skapar tabellsyntax i Oracle med Exempel. Detta kommer att vara mycket användbart för både Oracle DBA:er och utvecklare. De leker med det många gånger under dagen och god kunskap kan definitivt hjälpa dem att påskynda uppgiften. De blir ofta förvirrade angående datatypen och vad de ska använda under vilka omständigheter. Här försöker jag ge en översikt över alla användbara saker för Oracle-databastabeller
Vad är Oracle-databastabell?
-Tabell är den grundläggande enheten för datalagring i en Oracle-databas. Data lagras i rader och kolumner.
-Ett bord rymmer allt som behövs om något i den verkliga världen
-En tabell innehåller en uppsättning kolumner. En kolumn representerar en typ av data i tabellen. Till exempel kommer lönekolumnen i EMP-tabellen att ha lönerna
- En rad är en samling kolumninformation som motsvarar en enskild post.
Därefter kommer vi att prata i detalj om Oracle create table statement
Så skapar du en tabell i oracle
För att skapa en tabell i databasen måste vi ha följande information
- Tabellnamnet
- Tabelltyp
- Begränsningar
- tabelllagringsparameter
Låt oss titta på var och en av dessa i detalj
Table Naming Conventions for Oracle create table
- Namnet du väljer för en tabell måste följa dessa standardregler:
- Namnet måste börja med bokstaven A-Z eller a-z
- Kan innehålla siffror och understreck
- Kan vara med VERSALER eller gemener
- Kan vara upp till 30 tecken långa. Med 12.2 har den utökats till 128 tecken
- Kan inte använda samma namn på ett annat befintligt objekt i ditt schema
- Får inte vara en Oracle-server och ett reserverat SQL-ord
- Kolumnnamn, kolumndatatyper och kolumnstorlekar.
Konventioner för kolumnnamn –
- Namnet du väljer för en kolumn måste följa dessa standardregler:
- Namnet måste börja med bokstaven A-Z eller a-z
- Kan innehålla siffror och understreck
- Kan vara med VERSALER eller gemener
- Kan vara upp till 30 tecken lång. Med 12.2 har den utökats till 128 tecken
- Kan inte använda samma namn på ett annat befintligt objekt i ditt schema
- Får inte vara en Oracle-server och ett reserverat SQL-ord
Typ av tabell
Vanligt (högorganiserat) bord
-Detta är den grundläggande typen av bord för allmänna ändamål.
-Dess data lagras som en oordnad samling (hög)
Klustrad tabell
-En klustertabell är en tabell som är en del av ett kluster.
-Ett kluster är en grupp tabeller som delar samma datablock eftersom de delar gemensamma kolumner och ofta används tillsammans.
Indexorganiserad tabell
-Till skillnad från en vanlig (högorganiserad) tabell, lagras data för en indexorganiserad tabell i en B-trädindexstruktur på ett primärnyckelsorterat sätt.
-Förutom att lagra de primära nyckelkolumnvärdena för en indexorganiserad tabellrad, lagrar varje indexpost i B-trädet även icke-nyckelkolumnvärdena.
Partitionerad tabell
–Oracle-partitionerade tabeller gör att dina data kan delas upp i mindre, mer hanterbara delar som kallas partitioner eller till och med underpartitioner.
- Varje partition kan hanteras individuellt och kan fungera oberoende av de andra partitionerna, vilket ger en struktur som kan anpassas bättre för tillgänglighet och prestanda.
Extern tabell
Oracles externa tabeller gör det möjligt för Oracle att söka efter data som lagras utanför databasen i platta filer.
Global temporär tabell
Data i en global temporär tabell är privat, så att data som infogats av en session endast kan nås av den sessionen. De sessionsspecifika raderna i en global temporär tabell kan bevaras för hela sessionen eller bara för den aktuella transaktionen
Begränsningar och regler
Du kan ange regler för varje kolumn i en tabell. Dessa regler kallas integritetsbegränsningar. Ett sådant exempel är en integritetsbegränsning som inte är null. Denna begränsning tvingar kolumnen att innehålla ett värde i varje rad. Dessa regler upprätthålls placerade för varje kolumn eller uppsättning kolumner. Närhelst tabellen deltar i dataåtgärder valideras dessa regler och ger upphov till undantag vid överträdelse.
En begränsning kan vara något av följande:
- en begränsning på kolumnnivå
Begränsningar på kolumnnivå hänvisar till en enskild kolumn i tabellen och anger inte ett kolumnnamn (förutom kontrollbegränsningar). De hänvisar till kolumnen som de följer.
- en begränsning på tabellnivå
Begränsningar på tabellnivå hänvisar till en eller flera kolumner i tabellen. Begränsningar på tabellnivå anger namnen på de kolumner som de gäller. CHECK-begränsningar på tabellnivå kan referera till 0 eller fler kolumner i tabellen.
De tillgängliga begränsningstyperna är NOT NULL, Primary Key, Unique, Check och Foreign Key.
Primär nyckel
En primärnyckel i Oracle är en kolumn i en tabell vars värden unikt identifierar raden i tabellen. Ett primärnyckelvärde:
a) Måste unikt identifiera raden;
b) kan inte ha NULL värden;
Oracle skapar internt ett unikt orakelindex för att förhindra duplicering i kolumnvärdena. Det kan definieras på kolumn- eller tabellnivå
En primärnyckel kan också vara flera kolumner
Unik nyckel
Unik nyckel i Oracle betyder unikhet för kolumnen. Oracle-servern tillåter inte dubbletter av värden i kolumnen med unika begränsningar. Oracle skapar internt ett unikt index för att förhindra dubbelarbete i kolumnvärdena. Men det tillåter att vissa värden är null. Det kan definieras på kolumn- eller tabellnivå
Främmande nyckel
-En främmande nyckel i Oracle är en referensrestriktion mellan två tabeller.
-En främmande nyckel-begränsning validerar värdena för en INSERT eller UPDATE mot värdena i en annan kolumn, antingen i en annan tabell eller en annan kolumn i samma
-En främmande nyckel definierar alltid en förälder/barn-relation. "Föräldern" är kolumnen som refereras till i den främmande nyckeln och "barnet" är kolumnen eller kolumnerna som innehåller den främmande nyckeln.
-I allmänhet är dock en främmande nyckel ett fält (eller fält) som pekar på primärnyckeln i en annan tabell.
-Den kan definieras på kolumn- eller tabellnivå
Kontrollera begränsningen
En Oracle Check-begränsning kräver ett värde i databasen för att uppfylla ett specificerat villkor. Kontrollbegränsning tillåter att en kolumn införs en villkorlig regel, som måste valideras innan data infogas i kolumnen. Villkoret får inte innehålla en underfråga eller pseudokolumn CURRVAL NEXTVAL, LEVEL, ROWNUM eller SYSDATE.
Oracle tillåter att en enda kolumn har mer än en CHECK-begränsning. Det finns faktiskt ingen praktisk gräns för antalet CHECK-begränsningar som kan definieras för en kolumn.
Det kan definieras på kolumn- eller tabellnivå
Inte null
Det betyder att en datarad måste ha ett värde för kolumnen som anges som NOT NULL. Oracle-servern tillåter inte att rader lagras som bryter mot denna begränsning. Det kan bara definieras på kolumnnivå och inte på tabellnivå.
Tabelllagringsparameter
Tabeller lagras i Oracle Tablespace i databasen. Om inget tabellutrymme anges, går tabellen i användarens standardtabellutrymme.
Så i nötskal
1) Du måste välja lämpligt kolumnnamn och tabellnamn enligt standarden ovan. Det rekommenderas att ange kolumnnamn och tabellnamn så att du kan identifiera syftet genom att kontrollera namnen
2) För det andra måste du välja rätt Oracle-datatyp för tabellen.
Om det är en teckensträng bör vi välja VARCHAR2 (10). Detta är en variabel sträng, vi bör välja värdet på lämpligt sätt. Detta innebär att den kan lagra tecken till 10 byte. Det utrymme som används beror på värdena i kolumnen och det kommer inte att finnas något slöseri med utrymme.
Jag vill här betona en sak att när vi ger VARCHAR2(10) här är 10 antalet byte, inte tecknet.
Antalet tecken och byte är lika när ASCII-tecken är inblandat, men ekvationen ändras börja använda andra tecken än ASCII
Just nu stöder VARCHAR2 4000 byte, om din kolumn är större än så kan du använda LOB datatype, som kan lagra text för GIGA-byte.
Om det är ett nummer använder vi datatypen Number. Återigen kan vi välja värdet på lämpligt sätt. Exempelnummer(6,2) Detta kan innehålla maximalt från 999999.99
Om du vill lagra datum har Oracle tillhandahållit datumdatatyp för lagring.
3) Identifiera begränsningen på bordet. Bestäm vad som ska vara den primära nyckeln och vad alla kolumner inte skulle vara null.
När vi har all nödvändig information kan vi gå vidare med att skapa tabeller
Oracle skapa tabellsyntax
CREATE TABLE table_name ( col1 datatype [ NULL | NOT NULL ], col2 datatype [ NULL | NOT NULL ], ... col_n datatype [ NULL | NOT NULL ] ) tablespace <tablepace name>;
SYNTAX för oracle create Table primärnyckel. Det kan både definieras på kolumnnivå eller tabellnivå
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>
Exempel av oracle create Table primärnyckel
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 skapa index för att upprätthålla de primära nyckelbegränsningarna
Relaterat:Oracle-intervjufrågor
Förklaringen till tabell TEST1
1 | Den första kolumnen heter inv_id som skapas som en char-datatyp (max 7 siffror långa) och inte kan innehålla nollvärden |
2 | Den andra kolumnen heter item_id som skapas som en char-datatyp (max 7 siffror långa) och inte kan innehålla nollvärden |
3 | Den tredje kolumnen kallas skapad som är ett datum datatyp och kan även innehålla nollvärden. |
4 | Den fjärde kolumnen kallas who som är en char-datatyp och som även kan innehålla nollvärden. |
5 | Tabellnivå primärnyckelbegränsning TEST1_PK definieras på den sammansatta nyckeln (INV_ID, ITEM_ID) |
SYNTAX för oracle skapa tabellsatsen FOREIGN Key. Det kan både definieras på kolumnnivå eller tabellnivå
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) );
Förklaring till tabell EMP
1 | Den första kolumnen heter EMP_NO som skapas som ett tal och inte kan innehålla nullvärden |
2 | Den andra kolumnen heter emp_name som skapas som varchar2(50) och inte kan innehålla nollvärden |
3 | Den tredje kolumnen heter dept_id vilket är ett nummer. |
4 | Den fjärde kolumnen heter sal som är en nummerdatatyp och som även kan innehålla nollvärden. |
5 | Tabellnivå primärnyckelbegränsning EMP_PK definieras på nyckeln (EMP_NO) |
6 | Tabellnivå Utländska nyckelbegränsningar dept_fk som refererar till dept table dept_id |
Behörighet krävs för att Oracle ska skapa tabell
-Du måste ha behörigheten skapa tabellsystem för att skapa en ny tabell i ditt schema,
- Du måste ha behörigheten skapa valfritt tabellsystem för att för att skapa en tabell i en annan användares schema, dessutom måste ägaren av tabellen ha en kvot för tabellutrymmet som innehåller tabellen, eller UNLIMITED TABLESPACE systembehörighet li>
Relaterat:Hur man skriver sql-frågor
Andra egenskaper associerade med Oracle-databastabellen
Cache/no-cache
Använd CACHE-satserna för att ange hur Oracle Database ska lagra block i buffertcachen. Om du inte anger något i skapa tabellkommandot är det som standard no-cache
STANDARD
Värdet som infogats i kolumnen om infogningen eller uppdateringen skulle lämna kolumnvärdet NULL.
PARALLELL
Ange PARALLEL om du vill att Oracle ska välja en grad av parallellitet som är lika med antalet tillgängliga processorer på alla deltagande instanser gånger värdet på initieringsparametern PARALLEL_THREADS_PER_CPU.
Komprimera
Detta används av oraklet för att lagra tabellen i komprimerat format. Detta är tillgängligt från 11g och framåt
Kommentera en tabell eller kolumn
Du kan kommentera tabellen med kommandot
COMMENT ON TABLE <table_name> IS '<comment>';
Oracle skapa tabell med standardvärde
Ibland vill du tilldela ett standardvärde till kolumnen om det inte anges i insert-satsen, då kan du skapa tabellen med nedanstående syntax. DEFAULT är nyckelordet som används
CREATE TABLE EXP ( NAME VARCHAR2(20), SAL number(8,2) DEFAULT 800, hire_date DATE DEFAULT SYSDATE , birthdate DATE DEFAULT SYSDATE -10 )
Oracle skapa tabell förändringar av standardvärde i 12c
IDENTITY-kolumner
I Oracle Database 12c kan vi definiera tabellkolumner med SQL-nyckelordet IDENTITY som är ett SQL-nyckelord från American National Standards Institute (ANSI). Som automatiskt inkrementeras vid tidpunkten för insättningen (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ärden endast för metadata
Innan Oracle 11g lades till en ny kolumn till en befintlig tabell krävdes att alla rader i den tabellen modifierades för att lägga till den nya kolumnen. Så om tabellen är mycket stor, tog det lång tid att ändra tabell för att lägga till kolumn och låsningstid som också mer
Med Oracle introducerade 11g konceptet med standardvärden endast för metadata. Att lägga till en NOT NULL-kolumn med en DEFAULT-sats till en befintlig tabell innebar bara en metadataändring, snarare än en ändring av alla rader i tabellen. Frågor i den nya kolumnen skrevs om av optimeraren för att säkerställa att resultatet överensstämde med standarddefinitionen.
Läs mer om det i artikeln nedan
Hur man ändrar tabell lägg till kolumn oracle
Oracle 12c tar detta ett steg längre och tillåter endast metadata standardvärden för både obligatoriska och valfria kolumner. Som ett resultat kommer att lägga till en ny kolumn med en DEFAULT-sats i en befintlig tabell att hanteras som en ändring av enbart metadata, oavsett om den kolumnen är definierad som NOT NULL eller inte.
Detta är en enorm fördel för alla.
Data Dictionary Tabeller och vyer
All tabell- och kolumninformation lagras i tabellerna SYS.TAB$ och SYS.COL$. Oracle har tillhandahållit dataordboksvyer för att få information om tabeller och kolumner
Det finns tre kategorier av vyer
Hur man listar alla 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>
Hur man bestämmer tabellstorlek
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>’;
Tabell med antal rader och kommentarer
Frågan nedan kan användas för att hitta antalet rader och kommentarer i SCOTT-schemat
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;
Vanliga frågor om Oracle Create-tabell
1. Har oracle skapa eller ersätta tabell oracle kommando?
Oracle har inte skapa eller ersätt tabell-oracle-kommandot. Skapa eller ersätt är bara giltigt för vyer, PLSQL:endast procedurer. Du behöver bara göra ändringen med kommandot ALTER Table
Eller så kan du uttryckligen släppa tabellen och skapa den igen
vi har inga direkta, men du kan använda PLSQL för att emulera det
STÄLL IN SERVEROUTPUT PÅ
DECLARE c_emp int:=0;
BÖRJA VÄLJ count(*) in i c_emp FROM dba_tables där table_name ='EMP';
if c_emp<=0
EXECUTE IMMEDIATE 'skapa tabell EMP ( ID NUMBER(3), NAME VARCHAR2( 30) NOT NULL,SAL NUMBER*,2))';
end if;
END;
/
Exempelschema att öva
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;
Hoppas du gillar den här artikeln om oracle create table statement, command, syntax and tips.
Relaterade artiklar
ändra tabell lägg till kolumn orakel :Användbar insikt i Hur man ändrar tabell lägg till kolumn orakel. Detaljer om snabb lägga till kolumnfunktion som introduceras i Oracle 11g ges också
DROP TABLE ORACLE :Lär dig mer om släpptabell i Oracle, släpp tabell om den finns i Oracle, släpp flera tabeller i ett kommando, släpp tabellkaskadbegränsningar
ändra tabellflyttning :Kolla in det här inlägget för steg-för-steg-metoden om hur man bygger om bordet i Oracle med hjälp av alter table move, hur man bygger om tabell med lobs, lång kolumn
Truncate TABLE Oracle :Truncate TABLE i Oracle är snabbare än radera från tabellen i Oracle. Det är DDL-satsen och den aktiverar inte raderingstriggarna
Ändra tabell i Oracle :Ändra tabell i Oracle används för att ändra en kolumn, släppa och lägga till begränsningar, ändra datatypen för tabellkolumnen, ändra tabellen lagringsparametrar
oracle listar alla tabeller:vi kan få Lista alla tabeller i Oracle genom att antingen fråga alla_tabeller eller användartabeller eller dba_tabeller. vi kan välja kolumnen och var-klausulen efter behov
Supplerande inloggning Oracle
oracle sql-datumfunktioner
https://docs.oracle.com/cd/B19306_01/server.102/ b14231/tables.htm
Skapa en global tillfällig tabell i Oracle