Cet article explique comment créer une table dans Oracle, une clé primaire, des clés étrangères, créer une syntaxe de table dans Oracle avec des exemples. Cela sera très utile pour les DBA Oracle et les développeurs. Ils jouent avec lui plusieurs fois dans la journée et une bonne connaissance peut certainement les aider à accélérer la tâche. Ils sont souvent confus quant au type de données et à ce qu'il faut utiliser dans quelles circonstances. Ici, j'essaie de donner un aperçu de toutes les choses utiles pour les tables de base de données Oracle
Qu'est-ce qu'une table de base de données Oracle ?
-Les tables sont l'unité de base de stockage de données dans une base de données Oracle. Les données sont stockées dans des lignes et des colonnes.
-Un tableau contient tout ce qui est nécessaire à propos de quelque chose dans le monde réel
-Une table contient un ensemble de colonnes. Une colonne représente un type de données dans le tableau. Par exemple, la colonne des salaires dans le tableau EMP contiendra les salaires
- Une ligne est une collection d'informations de colonne correspondant à un seul enregistrement.
Ensuite, nous parlerons en détail de Oracle create table statement
Comment créer un tableau dans Oracle
Pour créer une table dans la base de données, nous devons disposer des informations suivantes
- Le nom de la table
- Type de tableau
- Contraintes
- paramètre de stockage de table
Examinons chacun de ces éléments en détail
Conventions de dénomination des tables pour Oracle créer une table
- Le nom que vous choisissez pour un tableau doit respecter ces règles standard :
- Le nom doit commencer par une lettre A-Z ou a-z
- Peut contenir des chiffres et des traits de soulignement
- Peut être en MAJUSCULES ou en minuscules
- Peut contenir jusqu'à 30 caractères. Avec 12.2, il a été étendu à 128 caractères
- Impossible d'utiliser le même nom qu'un autre objet existant dans votre schéma
- Ne doit pas être un serveur Oracle et un mot réservé SQL
- Nom de colonne, types de données de colonne et tailles de colonne.
Conventions de dénomination des colonnes –
- Le nom que vous choisissez pour une colonne doit respecter ces règles standard :
- Le nom doit commencer par une lettre A-Z ou a-z
- Peut contenir des chiffres et des traits de soulignement
- Peut être en MAJUSCULES ou en minuscules
- Peut contenir jusqu'à 30 caractères. Avec la version 12.2, il a été étendu à 128 caractères
- Impossible d'utiliser le même nom qu'un autre objet existant dans votre schéma
- Ne doit pas être un serveur Oracle et un mot réservé SQL
Type de tableau
Table ordinaire (organisée en tas)
-Il s'agit du type de tableau de base à usage général.
-Ses données sont stockées sous la forme d'une collection non ordonnée (tas)
Tableau en cluster
-Une table en cluster est une table qui fait partie d'un cluster.
-Un cluster est un groupe de tables qui partagent les mêmes blocs de données car elles partagent des colonnes communes et sont souvent utilisées ensemble.
Tableau organisé en index
-Contrairement à une table ordinaire (organisée en tas), les données d'une table organisée en index sont stockées dans une structure d'index B-tree de manière triée par clé primaire.
-En plus de stocker les valeurs de colonne de clé primaire d'une ligne de table organisée en index, chaque entrée d'index dans le B-tree stocke également les valeurs de colonne non clés.
Table partitionnée
–Les tables partitionnées Oracle permettent de décomposer vos données en éléments plus petits et plus faciles à gérer appelés partitions, voire sous-partitions.
- Chaque partition peut être gérée individuellement et peut fonctionner indépendamment des autres partitions, offrant ainsi une structure qui peut être mieux adaptée en termes de disponibilité et de performances.
Tableau externe
Les tables externes Oracle permettent à Oracle d'interroger des données stockées en dehors de la base de données dans des fichiers plats.
Table temporaire globale
Les données d'une table temporaire globale sont privées, de sorte que les données insérées par une session ne sont accessibles que par cette session. Les lignes spécifiques à la session dans une table temporaire globale peuvent être conservées pour toute la session ou uniquement pour la transaction en cours
Contraintes et règles
Vous pouvez spécifier des règles pour chaque colonne d'une table. Ces règles sont appelées contraintes d'intégrité. Un tel exemple est une contrainte d'intégrité non nulle. Cette contrainte force la colonne à contenir une valeur dans chaque ligne. Ces règles sont appliquées pour chaque colonne ou ensemble de colonnes. Chaque fois que la table participe à une action de données, ces règles sont validées et génèrent des exceptions en cas de violation.
Une contrainte peut être l'une des suivantes :
- une contrainte au niveau de la colonne
Les contraintes au niveau des colonnes font référence à une seule colonne de la table et ne spécifient pas de nom de colonne (à l'exception des contraintes de vérification). Ils font référence à la colonne qu'ils suivent.
- une contrainte au niveau de la table
Les contraintes au niveau de la table font référence à une ou plusieurs colonnes de la table. Les contraintes de niveau table spécifient les noms des colonnes auxquelles elles s'appliquent. Les contraintes CHECK au niveau de la table peuvent faire référence à 0 ou plusieurs colonnes de la table.
Les types de contraintes disponibles sont NOT NULL, Primary Key, Unique, Check et Foreign Key.
Clé primaire
Une clé primaire dans Oracle est une colonne d'une table dont les valeurs identifient de manière unique la ligne dans la table. Une valeur de clé primaire :
a) Doit identifier la ligne de manière unique ;
b) ne peut pas avoir de valeurs NULL ;
Oracle crée en interne un index Oracle unique pour éviter la duplication dans les valeurs de colonne. Il peut être défini au niveau colonne ou tableau
Une clé primaire peut aussi avoir plusieurs colonnes
Clé unique
La clé unique dans Oracle signifie l'unicité de la colonne. Le serveur Oracle n'autorisera pas les valeurs en double dans la colonne ayant des contraintes uniques. Oracle crée en interne un index unique pour éviter la duplication dans les valeurs de colonne. Mais cela permet à certaines valeurs d'être nulles. Il peut être défini au niveau colonne ou table
Clé étrangère
-Une clé étrangère dans Oracle est une contrainte référentielle entre deux tables.
-Une contrainte de clé étrangère valide les valeurs d'un INSERT ou UPDATE par rapport aux valeurs d'une autre colonne, soit dans une table différente, soit dans une autre colonne de la même
-Une clé étrangère définit toujours une relation parent/enfant. Le "parent" est la colonne qui est référencée dans la clé étrangère et le "enfant" est la colonne ou les colonnes qui contiennent la contrainte de clé étrangère.
-Généralement, cependant, une clé étrangère est un champ (ou des champs) qui pointe vers la clé primaire d'une autre table.
-Elle peut être définie au niveau de la colonne ou de la table
Vérifier la contrainte
Une contrainte de vérification Oracle nécessite qu'une valeur dans la base de données soit conforme à une condition spécifiée. La contrainte de vérification permet d'imposer une règle conditionnelle sur une colonne, qui doit être validée avant que les données ne soient insérées dans la colonne. La condition ne doit pas contenir de sous-requête ou de pseudo-colonne CURRVAL NEXTVAL, LEVEL, ROWNUM ou SYSDATE.
Oracle permet à une seule colonne d'avoir plus d'une contrainte CHECK. En fait, il n'y a pas de limite pratique au nombre de contraintes CHECK pouvant être définies pour une colonne.
Il peut être défini au niveau colonne ou table
Non nul
Cela signifie qu'une ligne de données doit avoir une valeur pour la colonne spécifiée comme NOT NULL. Le serveur Oracle n'autorisera pas le stockage des lignes qui violent cette contrainte. Il ne peut être défini qu'au niveau de la colonne, et non au niveau de la table.
Paramètre de stockage de table
Les tables sont stockées dans Oracle Tablespace dans la base de données. Si aucun tablespace n'est spécifié, la table va dans le tablespace par défaut de l'utilisateur.
En résumé
1) Vous devez choisir le nom de colonne et le nom de table appropriés conformément à la norme indiquée ci-dessus. Il est recommandé de donner le nom de la colonne et le nom de la table de sorte que vous puissiez identifier le but en vérifiant les noms
2) Deuxièmement, vous devez choisir le bon type de données Oracle pour la table.
S'il s'agit d'une chaîne de caractères, nous devrions choisir VARCHAR2 (10). Il s'agit d'une chaîne variable, nous devons choisir la valeur de manière appropriée. Cela signifie qu'il peut stocker des caractères sur 10 octets. L'espace utilisé dépendra des valeurs de la colonne et il n'y aura pas de gaspillage d'espace.
Je voudrais souligner ici une chose que lorsque nous donnons VARCHAR2(10) ici 10 est le nombre d'octets, pas le caractère.
Le nombre de caractères et d'octets est similaire lorsque le caractère ASCII est impliqué, mais l'équation est modifiée nous commencer à utiliser un caractère autre qu'ASCII
À l'heure actuelle, VARCHAR2 prend en charge 4000 octets, si votre colonne est plus grande que cela, vous pouvez utiliser le type de données LOB, qui peut stocker du texte pour GIGA octets.
S'il s'agit d'un nombre, nous utilisons le type de données Number. Encore une fois, nous pouvons choisir la valeur de manière appropriée. Exemple number(6,2) Cela peut contenir un maximum de 999999.99
Si vous souhaitez stocker la date, Oracle a fourni le type de données de date pour le stockage.
3) Identifiez la contrainte sur la table. Décidez quelle sera la clé primaire et quelles colonnes ne seront pas nulles.
Une fois que nous avons toutes les informations requises, nous pouvons passer à la création du tableau
Syntaxe de création de table 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 pour oracle create Table clé primaire. Il peut être défini au niveau de la colonne ou au niveau de la table
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>
Exemple de clé primaire 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 crée un index pour appliquer les contraintes de clé primaire
Connexe :Questions d'entretien Oracle
L'explication du tableau TEST1
1 | La première colonne s'appelle inv_id qui est créé en tant que type de données char (maximum 7 chiffres) et ne peut pas contenir de valeurs nulles |
2 | La deuxième colonne s'appelle id_item qui est créé en tant que type de données char (maximum 7 chiffres) et ne peut pas contenir de valeurs nulles |
3 | La troisième colonne est appelée créé qui est une date type de données et peut également contenir des valeurs nulles. |
4 | La quatrième colonne s'appelle qui qui est un type de données char et peut également contenir des valeurs nulles. |
5 | La contrainte de clé primaire au niveau de la table TEST1_PK est définie sur la clé composite (INV_ID, ITEM_ID) |
SYNTAX pour oracle create Table instruction FOREIGN Key. Il peut être défini au niveau de la colonne ou au niveau de la table
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) );
Explication du tableau EMP
1 | La première colonne s'appelle EMP_NO qui est créé en tant que nombre et ne peut pas contenir de valeurs nulles |
2 | La deuxième colonne s'appelle emp_name qui est créé en tant que varchar2(50) et ne peut pas contenir de valeurs nulles |
3 | La troisième colonne s'appelle dept_id qui est un nombre. |
4 | La quatrième colonne s'appelle sal qui est un type de données numérique et peut également contenir des valeurs nulles. |
5 | La contrainte de clé primaire au niveau de la table EMP_PK est définie sur la clé (EMP_NO) |
6 | Contraintes de clé étrangère au niveau de la table dept_fk qui fait référence à la table dept dept_id |
Privilège requis pour créer une table oracle
-Vous devez avoir le privilège système de création de table afin de créer une nouvelle table dans votre schéma,
- Vous devez disposer du privilège système de création de table pour créer une table dans le schéma d'un autre utilisateur. En outre, le propriétaire de la table doit disposer d'un quota pour l'espace de table contenant la table ou du privilège système UNLIMITED TABLESPACE
Connexe :Comment écrire des requêtes SQL
Autres caractéristiques associées à la table de base de données oracle
Cache/pas de cache
Utilisez les clauses CACHE pour indiquer comment Oracle Database doit stocker les blocs dans le cache de tampon. Si vous ne spécifiez rien dans la commande de création de table, il s'agit par défaut de no-cache
PAR DÉFAUT
La valeur insérée dans la colonne si l'insertion ou la mise à jour laisserait la valeur de colonne NULL.
PARALLÈLE
Spécifiez PARALLEL si vous souhaitez qu'Oracle sélectionne un degré de parallélisme égal au nombre de processeurs disponibles sur toutes les instances participantes multiplié par la valeur du paramètre d'initialisation PARALLEL_THREADS_PER_CPU.
Compresser
Ceci est utilisé par l'oracle pour stocker la table au format compressé. Ceci est disponible à partir de 11g
Commenter un tableau ou une colonne
Vous pouvez commenter le tableau à l'aide de la commande
COMMENT ON TABLE <table_name> IS '<comment>';
Oracle crée une table avec la valeur par défaut
Parfois, vous souhaitez attribuer une valeur par défaut à la colonne si elle n'est pas spécifiée dans l'instruction d'insertion, vous pouvez alors créer la table avec la syntaxe ci-dessous. DEFAULT est le mot clé utilisé
CREATE TABLE EXP ( NAME VARCHAR2(20), SAL number(8,2) DEFAULT 800, hire_date DATE DEFAULT SYSDATE , birthdate DATE DEFAULT SYSDATE -10 )
La valeur par défaut d'Oracle crée une table change dans 12c
Colonnes IDENTITY
Dans Oracle Database 12c, nous pouvons définir des colonnes de table avec le mot-clé SQL IDENTITY qui est un mot-clé SQL de l'American National Standards Institute (ANSI). Qui sont auto-incrémentés au moment de l'insertion (comme dans 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) );
Valeurs par défaut des métadonnées uniquement
Avant la version pré-Oracle 11g, l'ajout d'une nouvelle colonne à une table existante nécessitait que toutes les lignes de cette table soient modifiées pour ajouter la nouvelle colonne. Donc, si la table est très grande, modifier la colonne d'ajout de table a pris un temps substantiel et le temps de verrouillage aussi plus
Avec Oracle, 11g a introduit le concept de valeurs par défaut de métadonnées uniquement. L'ajout d'une colonne NOT NULL avec une clause DEFAULT à une table existante impliquait simplement une modification des métadonnées, plutôt qu'une modification de toutes les lignes de la table. Les requêtes de la nouvelle colonne ont été réécrites par l'optimiseur pour s'assurer que le résultat était cohérent avec la définition par défaut.
En savoir plus à ce sujet dans l'article ci-dessous
Comment modifier la table ajouter une colonne oracle
Oracle 12c va encore plus loin en autorisant les valeurs par défaut des métadonnées uniquement pour les colonnes obligatoires et facultatives. Par conséquent, l'ajout d'une nouvelle colonne avec une clause DEFAULT à une table existante sera traité comme une modification de métadonnées uniquement, que cette colonne soit définie comme NOT NULL ou non.
C'est un énorme avantage pour tous.
Tableaux et vues du dictionnaire de données
Toutes les informations de table et de colonne sont stockées dans les tables SYS.TAB$ et SYS.COL$. Oracle a fourni des vues de dictionnaire de données pour obtenir des informations sur les tables et les colonnes
Il existe trois catégories de vues
Comment répertorier toutes les tables dans 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>
Comment déterminer la taille de la table
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>’;
Tableaux avec nombre de lignes et commentaires
La requête ci-dessous peut être utilisée pour trouver le nombre de lignes et de commentaires dans le schéma 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;
Questions fréquemment posées sur la création de table Oracle
1. Est-ce qu'oracle a créer ou remplacer la commande oracle de table ?
Oracle n'a pas de commande oracle de création ou de remplacement de table. Créer ou remplacer n'est valide que pour les vues, PLSQL :procédures uniquement. Vous devez effectuer la modification à l'aide de la commande ALTER Table uniquement
Ou vous pouvez explicitement supprimer la table et la recréer
nous n'en avons pas de direct, mais vous pouvez utiliser PLSQL pour émuler cela
SET SERVEROUTPUT ON
DECLARE c_emp int:=0;
BEGIN SELECT count(*) into c_emp FROM dba_tables where table_name ='EMP';
if c_emp<=0
EXECUTE IMMEDIATE 'create table EMP ( ID NUMBER(3), NAME VARCHAR2( 30) NOT NULL,SAL NUMBER*,2))';
end if;
END;
/
Exemple de schéma pour s'entraîner
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;
J'espère que vous aimez cet article sur l'instruction, la commande, la syntaxe et les conseils de création de table d'Oracle.
Articles connexes
alter table add column oracle :informations utiles sur la façon de modifier la table add column oracle. Détails sur la fonction d'ajout rapide de colonne introduite dans oracle 11g également fournis déplacement de table :Consultez cet article pour la méthode étape par étape sur Comment reconstruire la table dans oracle en utilisant alter table move, Comment reconstruire une table ayant des lobs, une longue colonne
Tronquer TABLE Oracle :Tronquer TABLE dans Oracle est plus rapide que supprimer de la table dans oracle. Il s'agit d'une instruction DDL et elle ne déclenche pas les déclencheurs de suppression
Alter Table dans Oracle :Alter table dans Oracle est utilisé pour modifier une colonne, supprimer et ajouter des contraintes, modifier le type de données de la colonne de table, modifier la table paramètres de stockage
oracle liste toutes les tables :nous pouvons obtenir la liste de toutes les tables dans Oracle en interrogeant all_tables ou user_tables ou dba_tables. nous pouvons sélectionner la colonne et la clause where selon les besoins b14231/tables.htm
Création d'une table temporaire globale dans Oracle