Oracle
 sql >> Database >  >> RDS >> Oracle

come creare una tabella in Oracle

Questo articolo parla di come creare tabelle in Oracle, chiave primaria, chiavi esterne, creare sintassi di tabelle in Oracle con esempi. Questo sarà molto utile sia per i DBA che per gli sviluppatori Oracle. Ci giocano molte volte al giorno e una buona conoscenza può sicuramente aiutarli ad accelerare il compito. Spesso si confondono sul tipo di dati e su cosa usare in quali circostanze. Qui sto cercando di fornire una panoramica di tutte le cose utili per le tabelle di database Oracle

Cos'è la tabella del database Oracle?

-Le tabelle sono l'unità di base dell'archiviazione dei dati in un database Oracle. I dati vengono archiviati in righe e colonne.

-Un tavolo contiene tutto il necessario su qualcosa nel mondo reale

-Una tabella contiene un insieme di colonne. Una colonna rappresenta un tipo di dati nella tabella, ad esempio, la colonna dello stipendio nella tabella EMP conterrà gli stipendi

  • Una riga è una raccolta di informazioni di colonna corrispondenti a un singolo record.

Successivamente, parleremo in dettaglio di istruzione Oracle create table

Come creare una tabella in oracle

Per creare una tabella nel database, dobbiamo avere le seguenti informazioni

  • Il nome della tabella
  • Tipo di tabella
  • Vincoli
  • parametro di archiviazione della tabella

Diamo un'occhiata a ciascuno di questi in dettaglio

Convenzioni di denominazione delle tabelle per Oracle per la creazione di tabelle

  • Il nome che scegli per un tavolo deve seguire queste regole standard:
  • Il nome deve iniziare con una lettera A-Z o a-z
  • Può contenere numeri e trattini bassi
  • Può essere in MAIUSCOLO o in minuscolo
  • Può avere una lunghezza massima di 30 caratteri. Con 12.2, è stato esteso a 128 caratteri
  • Impossibile utilizzare lo stesso nome di un altro oggetto esistente nel tuo schema
  • Non deve essere un server Oracle e una parola riservata SQL
  • Nome della colonna, tipi di dati della colonna e dimensioni della colonna.

Convenzioni di denominazione delle colonne –

  • Il nome che scegli per una colonna deve seguire queste regole standard:
  • Il nome deve iniziare con una lettera A-Z o a-z
  • Può contenere numeri e trattini bassi
  • Può essere in MAIUSCOLO o in minuscolo
  • Può essere lungo fino a 30 caratteri. Con 12.2, è stato esteso a 128 caratteri
  • Impossibile utilizzare lo stesso nome di un altro oggetto esistente nel tuo schema
  • Non deve essere un server Oracle e una parola riservata SQL

Tipo di tabella

Tabella ordinaria (organizzata in heap)

-Questo è il tipo di tabella di base e generico.

-I suoi dati vengono archiviati come una raccolta non ordinata (heap)

Tabella a grappolo

-Una tabella in cluster è una tabella che fa parte di un cluster.

-Un cluster è un gruppo di tabelle che condividono gli stessi blocchi di dati perché condividono colonne comuni e vengono spesso utilizzate insieme.

Tabella organizzata per indici

-A differenza di una tabella ordinaria (organizzata in heap), i dati per una tabella organizzata in base all'indice vengono archiviati in una struttura di indice B-tree in un modo ordinato per chiave primaria.

-Oltre a memorizzare i valori della colonna della chiave primaria di una riga di tabella organizzata in base all'indice, ogni voce dell'indice nell'albero B memorizza anche i valori della colonna non chiave.

Tabella partizionata

–Le tabelle Oracle Partitioned consentono di scomporre i tuoi dati in parti più piccole e gestibili chiamate partizioni o anche sottopartizioni.

  • Ogni partizione può essere gestita individualmente e può funzionare indipendentemente dalle altre partizioni, fornendo così una struttura che può essere ottimizzata per disponibilità e prestazioni.

Tavolo esterno

Le tabelle Oracle External consentono a Oracle di eseguire query sui dati archiviati all'esterno del database in file flat.

Tabella temporanea globale

I dati in una tabella temporanea globale sono privati, in modo tale che i dati inseriti da una sessione siano accessibili solo da quella sessione. Le righe specifiche della sessione in una tabella temporanea globale possono essere conservate per l'intera sessione o solo per la transazione corrente

Vincoli e regole

È possibile specificare regole per ciascuna colonna di una tabella. Queste regole sono chiamate vincoli di integrità. Uno di questi esempi è un vincolo di integrità non nullo. Questo vincolo forza la colonna a contenere un valore in ogni riga. Queste regole vengono applicate per ogni colonna o set di colonne. Ogni volta che la tabella partecipa all'azione sui dati, queste regole vengono convalidate e sollevano eccezioni in caso di violazione.

Un vincolo può essere uno dei seguenti:

  • un vincolo a livello di colonna

I vincoli a livello di colonna si riferiscono a una singola colonna nella tabella e non specificano un nome di colonna (tranne i vincoli di controllo). Si riferiscono alla colonna che seguono.

  • un vincolo a livello di tabella

I vincoli a livello di tabella si riferiscono a una o più colonne nella tabella. I vincoli a livello di tabella specificano i nomi delle colonne a cui si applicano. I vincoli CHECK a livello di tabella possono fare riferimento a 0 o più colonne nella tabella.

I tipi di vincolo disponibili sono NOT NULL, Primary Key, Unique, Check e Foreign Key.

Chiave primaria

Una chiave primaria in Oracle è una colonna in una tabella i cui valori identificano in modo univoco la riga della tabella. Un valore di chiave primaria:

a) deve identificare in modo univoco la riga;

b) non può avere valori NULL;

Oracle crea internamente un indice Oracle univoco per prevenire la duplicazione nei valori delle colonne. Può essere definito a livello di colonna o tabella

Una chiave primaria può anche essere composta da più colonne

Chiave univoca

Chiave univoca in Oracle significa unicità per la colonna. Il server Oracle non consentirà valori duplicati nella colonna con vincoli univoci. Oracle crea internamente un indice univoco per prevenire la duplicazione nei valori delle colonne. Ma consente ad alcuni valori di essere nulli. Può essere definito a livello di colonna o tabella

Chiave straniera

-Una chiave esterna in Oracle è un vincolo referenziale tra due tabelle.

-Un vincolo di chiave esterna convalida i valori di un INSERT o UPDATE rispetto ai valori in un'altra colonna, in una tabella diversa o in un'altra colonna nella stessa

-Una chiave esterna definisce sempre una relazione genitore/figlio. Il "genitore" è la colonna a cui si fa riferimento nella chiave esterna e il "figlio" è la colonna o le colonne che contengono il vincolo di chiave esterna.

-In genere, tuttavia, una chiave esterna è un campo (o più campi) che punta alla chiave primaria di un'altra tabella.
-Può essere definita a livello di colonna o tabella

Verifica vincolo

Un vincolo di controllo Oracle richiede un valore nel database per soddisfare una condizione specificata. Il vincolo di controllo consente di imporre una regola condizionale su una colonna, che deve essere convalidata prima che i dati vengano inseriti nella colonna. La condizione non deve contenere una sottoquery o una pseudo colonna CURRVAL NEXTVAL, LEVEL, ROWNUM o SYSDATE.

Oracle consente a una singola colonna di avere più di un vincolo CHECK. In effetti, non esiste un limite pratico al numero di vincoli CHECK che possono essere definiti per una colonna.

Può essere definito a livello di colonna o tabella

Non nullo

Significa che una riga di dati deve avere un valore per la colonna specificato come NOT NULL. Il server Oracle non consentirà l'archiviazione di righe che violano questo vincolo. Può essere definito solo a livello di colonna e non a livello di tabella.

Parametro di archiviazione della tabella

Le tabelle sono archiviate in Oracle Tablespace nel database. Se non viene specificato alcun tablespace, la tabella va nello spazio table predefinito dell'utente.

Quindi in poche parole

1) È necessario scegliere il nome della colonna e il nome della tabella appropriati secondo lo standard sopra indicato. Si consiglia di fornire il nome della colonna e il nome della tabella in modo da poter identificare lo scopo controllando i nomi

2) In secondo luogo, devi scegliere il tipo di dati Oracle corretto per la tabella.
Se si tratta di una stringa di caratteri, dovremmo scegliere VARCHAR2 (10). Questa è una stringa variabile, dovremmo scegliere il valore in modo appropriato. Ciò significa che può memorizzare caratteri fino a 10 byte. Lo spazio utilizzato dipenderebbe dai valori nella colonna e non ci saranno sprechi di spazio.

Vorrei sottolineare qui una cosa che quando diamo VARCHAR2(10) qui 10 è il numero dei byte, non il carattere.
Il numero di caratteri e byte sono simili quando è coinvolto il carattere ASCII, ma l'equazione viene modificata noi inizia a usare un carattere diverso da ASCII

In questo momento VARCHAR2 supporta 4000 byte, se la tua colonna è più grande di quella, puoi utilizzare il tipo di dati LOB, che può memorizzare il testo per i byte GIGA.

Se è un numero, utilizziamo il tipo di dati Numero. Ancora una volta possiamo scegliere il valore in modo appropriato. Esempio numero(6,2) Può contenere un massimo di 999999,99

Se desideri memorizzare la data, Oracle ha fornito il tipo di dati della data per l'archiviazione.

3) Identificare il vincolo sul tavolo. Decidi quale sarà la chiave primaria e quali non sarebbero tutte le colonne null.

Una volta ottenute tutte le informazioni richieste, possiamo procedere con la creazione delle tabelle

Sintassi di creazione tabella Oracle

CREATE TABLE table_name
(
col1 datatype [ NULL | NOT NULL ],
col2 datatype [ NULL | NOT NULL ],
...
col_n datatype [ NULL | NOT NULL ]
)  tablespace <tablepace name>;

SINTASSI per Oracle create Table chiave primaria. Può essere definito sia a livello di colonna che a livello di tabella

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>

Esempio di chiave primaria Oracle create Table

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 crea l'indice per applicare i vincoli della chiave primaria

Correlati:domande sull'intervista Oracle

La spiegazione per la tabella TEST1

1 La prima colonna si chiama  inv_id   che viene creato come tipo di dati char (lunghezza massima 7 cifre) e non può contenere valori null
2 La seconda colonna si chiama  item_id   che viene creato come tipo di dati char (lunghezza massima 7 cifre) e non può contenere valori null
3 La terza colonna è denominata created che è una data datatype e può anche contenere valori null.
4 La quarta colonna è chiamata chi che è un tipo di dati char e può anche contenere valori nulli.
5 Il vincolo della chiave primaria a livello di tabella TEST1_PK è definito sulla chiave composta (INV_ID, ITEM_ID)

SINTASSI per Oracle create istruzione tabella FOREIGN Key. Può essere definito sia a livello di colonna che a livello di tabella

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) );

Spiegazione per la tabella EMP

1 La prima colonna si chiama EMP_NO che viene creato come numero e non può contenere valori null
2 La seconda colonna si chiama emp_name che viene creato come varchar2(50) e non può contenere valori null
3 La terza colonna si chiama dept_id che è un numero.
4 La quarta colonna si chiama sal che è un tipo di dati numerico e può contenere anche valori nulli.
5 Il vincolo della chiave primaria a livello di tabella EMP_PK è definito sulla  chiave (EMP_NO)
6 Limiti di chiave esterna a livello di tabella dept_fk che fa riferimento alla tabella di reparto dept_id

Privilegio richiesto per creare una tabella in Oracle

-Devi disporre del privilegio di creazione della tabella di sistema per creare una nuova tabella nel tuo schema,

  • Devi disporre del privilegio di sistema per la creazione di qualsiasi tabella per  creare una tabella nello schema di un altro utente, inoltre, il proprietario della tabella deve disporre di una quota per il tablespace che contiene la tabella o del privilegio di sistema UNLIMITED TABLESPACE

Correlati:Come scrivere query sql

Altre caratteristiche associate alla tabella del database Oracle

Cache/nessuna cache

Utilizzare le clausole CACHE per indicare in che modo Oracle Database deve archiviare i blocchi nella cache del buffer. Se non specifichi nulla nel comando crea tabella, per impostazione predefinita è no-cache

DEFAULT

Il valore inserito nella colonna se l'inserimento o l'aggiornamento lascerebbe il valore della colonna NULL.

| NULLO>

PARALLELO

Specificare PARALLEL se si desidera che Oracle selezioni un grado di parallelismo pari al numero di CPU disponibili su tutte le istanze partecipanti moltiplicato per il valore del parametro di inizializzazione PARALLEL_THREADS_PER_CPU.

Comprimi

Viene utilizzato dall'oracolo per archiviare la tabella in formato compresso. Questo è disponibile da 11g in poi

Commenta una tabella o una colonna

Puoi commentare la tabella usando il comando

COMMENT ON TABLE <table_name> IS '<comment>';

Oracle crea tabella con valore predefinito

A volte si desidera assegnare un valore predefinito alla colonna se non è specificato nell'istruzione insert, quindi è possibile creare la tabella con la sintassi seguente. DEFAULT è la parola chiave utilizzata

CREATE TABLE EXP
(
NAME VARCHAR2(20),
SAL number(8,2) DEFAULT 800,
hire_date DATE DEFAULT SYSDATE ,
birthdate DATE DEFAULT SYSDATE -10
)

Modifiche al valore predefinito della tabella di creazione di Oracle in 12c

Colonne IDENTITY
In Oracle Database 12c, possiamo definire le colonne della tabella con la parola chiave SQL IDENTITY che è una parola chiave SQL dell'American National Standards Institute (ANSI). Che vengono incrementati automaticamente al momento dell'inserimento (come in 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)
);

Valori DEFAULT solo metadati

Prima di Oracle 11g, l'aggiunta di una nuova colonna a una tabella esistente richiedeva la modifica di tutte le righe di quella tabella per aggiungere la nuova colonna. Quindi, se la tabella è molto grande, modificare la tabella e aggiungere la colonna ha richiesto molto tempo e tempo di blocco e anche di più

Con Oracle, 11g ha introdotto il concetto di valori predefiniti solo per i metadati. L'aggiunta di una colonna NOT NULL con una clausola DEFAULT a una tabella esistente ha comportato solo una modifica dei metadati, anziché una modifica a tutte le righe della tabella. Le query della nuova colonna sono state riscritte dall'ottimizzatore per assicurarsi che il risultato fosse coerente con la definizione predefinita.

Maggiori informazioni a riguardo nell'articolo sottostante

Come modificare la tabella aggiungi colonna oracolo

Oracle 12c fa un ulteriore passo avanti, consentendo valori predefiniti solo per i metadati delle colonne obbligatorie e facoltative. Di conseguenza, l'aggiunta di una nuova colonna con una clausola DEFAULT a una tabella esistente verrà gestita come una modifica di soli metadati, indipendentemente dal fatto che tale colonna sia definita come NOT NULL o meno.

Questo è un enorme vantaggio per tutti.

Tabelle e viste del dizionario dei dati

Tutte le informazioni su tabelle e colonne sono archiviate nelle tabelle SYS.TAB$ e SYS.COL$. Oracle ha fornito viste del dizionario dei dati  per ottenere informazioni su tabelle e colonne

Esistono tre categorie di viste

Come elencare tutte le tabelle in 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>

Come determinare la dimensione della tabella

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>’;

Tabelle con numero di righe e commenti

La query seguente può essere utilizzata per trovare il conteggio di righe e commenti nello schema SCOTT

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;

Domande frequenti su Oracle create table

1. Oracle ha il comando di creazione o sostituzione della tabella oracle?

Oracle non ha il comando di creazione o sostituzione della tabella Oracle. Crea o sostituisci è valido solo per viste, PLSQL:solo procedure. Devi apportare la modifica usando solo il comando ALTER Table
Oppure puoi rilasciare esplicitamente la tabella e crearla di nuovo

2. Abbiamo qualche clausola come Oracle create table se non esiste?

non abbiamo alcun direct, ma puoi usare PLSQL per emulare che
SET SERVEROUTPUT ON
DECLARE c_emp int:=0;
BEGIN SELECT count(*) in c_emp FROM dba_tables where table_name ='EMP';
if c_emp<=0
EXECUTE IMMEDIATE 'crea table EMP ( ID NUMBER(3), NAME VARCHAR2( 30) NOT NULL,SAL NUMBER*,2))';
end if;
END;
/

Schema di esempio per esercitarsi

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;

Spero che questo articolo ti piaccia sull'istruzione, il comando, la sintassi e i suggerimenti della tabella di creazione di Oracle.

Articoli correlati
alter table add column oracle :informazioni utili su come modificare table add column oracle. Vengono forniti anche i dettagli sulla funzionalità di aggiunta rapida delle colonne introdotta in Oracle 11g
DROP TABLE ORACLE :informazioni su drop table in Oracle, drop table se esiste in Oracle, drop più tabelle in un comando, drop table cascade vincoli
alter table move:dai un'occhiata a questo post per il metodo passo passo su Come ricostruire la tabella in Oracle usando alter table move, Come ricostruire una tabella con lob, colonna lunga
Troncate TABLE Oracle:Troncate TABLE in Oracle è più veloce di elimina dalla tabella in Oracle. È un'istruzione DDL e non attiva i trigger di eliminazione
Alter Table in Oracle:Alter table in Oracle viene utilizzato per modificare una colonna, eliminare e aggiungere vincoli, modificare il tipo di dati della colonna della tabella, modificare la tabella parametri di archiviazione
oracle elenca tutte le tabelle:possiamo ottenere List All Tables in Oracle eseguendo query all_tables o user_tables o dba_tables. possiamo selezionare la colonna e la clausola where secondo la necessità
Registrazione supplementare in Oracle
funzioni di data Oracle sql
https://docs.oracle.com/cd/B19306_01/server.102/ b14231/tables.htm
Creazione di una tabella temporanea globale in Oracle