sql >> Databasteknik >  >> RDS >> Oracle

hur man skapar en tabell i oracle

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.

| 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

2. Har vi någon klausul som oracle create table om inte existerar?

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


  1. SQL Server sp_msforeachtable användning för att välja endast de tabeller som uppfyller något villkor

  2. PostgreSQL-installation på Docker

  3. Microsoft Access Table Tips – Tricks och riktlinjer del 5

  4. Att använda IS NULL eller IS NOT NULL på anslutningsvillkor - Teorifråga