Тази статия говори за това как да създадете таблица в Oracle, първичен ключ, външни ключове, създаване на синтаксис на таблица в oracle с примери. Това ще бъде много полезно както за DBA на Oracle, така и за разработчиците. Те играят с него много пъти през деня и доброто познаване определено може да им помогне да ускорят задачата. Те често се объркват относно типа данни и какво да използват при какви обстоятелства. Тук се опитвам да дам общ преглед на всички полезни неща за таблиците на базата данни на Oracle
Какво е таблица с база данни на Oracle?
-Таблиците са основната единица за съхранение на данни в базата данни на Oracle. Данните се съхраняват в редове и колони.
-Таблица съдържа всичко необходимо за нещо в реалния свят
- Таблицата съдържа набор от колони. Колоната представлява един вид данни в таблицата. Например колоната за заплати в таблицата EMP ще съдържа заплатите
- Редът е колекция от информация за колони, съответстваща на един запис.
След това ще говорим подробно за изявление за създаване на таблица на Oracle
Как да създадете таблица в oracle
За да създадем таблица в базата данни, трябва да имаме следната информация
- Името на таблицата
- Тип таблица
- Ограничения
- параметър за съхранение на таблица
Нека разгледаме всеки от тях в подробности
Конвенции за именуване на таблици за Oracle създаване на таблица
- Името, което изберете за таблица, трябва да отговаря на следните стандартни правила:
- Името трябва да започва с букви A-Z или a-z
- Може да съдържа числа и долни черти
- Може да бъде с ГОРНА или малка буква
- Може да бъде с дължина до 30 знака. С 12.2 той е разширен до 128 знака
- Не може да се използва същото име на друг съществуващ обект във вашата схема
- Не трябва да бъде Oracle сървър и запазена дума за SQL
- Име на колона, типове данни за колони и размери на колони.
Конвенции за именуване на колони –
- Името, което изберете за колона, трябва да отговаря на следните стандартни правила:
- Името трябва да започва с букви A-Z или a-z
- Може да съдържа числа и долни черти
- Може да бъде с ГОРНА или малка буква
- Може да бъде с дължина до 30 знака. С 12.2 тя е разширена до 128 знака
- Не може да се използва същото име на друг съществуващ обект във вашата схема
- Не трябва да бъде Oracle сървър и запазена дума за SQL
Тип таблица
Обикновена (организирана в купчина) маса
-Това е основният тип маса с общо предназначение.
-Неговите данни се съхраняват като неподредена колекция (хийп)
Групирана таблица
-Клъстерираната таблица е таблица, която е част от клъстер.
-Клъстерът е група от таблици, които споделят едни и същи блокове от данни, тъй като споделят общи колони и често се използват заедно.
Индексно организирана таблица
-За разлика от обикновена (организирана в купчина) таблица, данните за таблица, организирана от индекс, се съхраняват в индексна структура на B-дърво по първичен ключ, сортиран по начин.
-Освен съхраняването на стойностите на колоната с първичен ключ на ред, организиран от индексна таблица, всеки запис на индекса в B-дървото съхранява и стойностите на колони, които не са ключови.
Разделена таблица
– Разделените таблици на Oracle позволяват вашите данни да бъдат разбити на по-малки, по-управляеми части, наречени дялове или дори подраздели.
- Всеки дял може да се управлява поотделно и може да работи независимо от другите дялове, като по този начин осигурява структура, която може да бъде по-добре настроена за наличност и производителност.
Външна таблица
Външните таблици на Oracle позволяват Oracle да заявява данни, които се съхраняват извън базата данни в плоски файлове.
Глобална временна таблица
Данните в глобална временна таблица са частни, така че данните, вмъкнати от сесия, могат да бъдат достъпни само от тази сесия. Специфичните за сесията редове в глобална временна таблица могат да бъдат запазени за цялата сесия или само за текущата транзакция
Ограничения и правила
Можете да зададете правила за всяка колона на таблица. Тези правила се наричат ограничения на целостта. Един такъв пример е ограничение за целостта, което не е нула. Това ограничение принуждава колоната да съдържа стойност във всеки ред. Тези правила се прилагат за всяка колона или набор от колони. Всеки път, когато таблицата участва в действие с данни, тези правила се валидират и създават изключения при нарушаване.
Ограничението може да бъде едно от следните:
- ограничение на ниво колона
Ограниченията на ниво колона се отнасят до една колона в таблицата и не посочват име на колона (с изключение на ограниченията за проверка). Те се отнасят до колоната, която следват.
- ограничение на ниво таблица
Ограниченията на ниво таблица се отнасят до една или повече колони в таблицата. Ограниченията на ниво таблица определят имената на колоните, към които се прилагат. Ограниченията CHECK на ниво таблица могат да се отнасят до 0 или повече колони в таблицата.
Наличните типове ограничения НЕ са NULL, Първичен ключ, Уникален, Проверка и Външен ключ.
Първичен ключ
Първичният ключ в Oracle е колона в таблица чиито стойности уникално идентифицират реда в таблицата. Стойност на първичен ключ:
a) Трябва уникално да идентифицира реда;
б) не може да има NULL стойности;
Oracle вътрешно създава уникален индекс на Oracle, за да предотврати дублирането в стойностите на колоните. Може да се дефинира на ниво колона или таблица
Първичният ключ също може да бъде няколко колони
Уникален ключ
Уникалният ключ в Oracle означава уникалност за колоната. Сървърът на Oracle няма да позволи дублиращи се стойности в колоната с уникални ограничения. Oracle вътрешно създава уникален индекс, за да предотврати дублирането в стойностите на колоните. Но позволява някои стойности да бъдат нулеви. Може да се дефинира на ниво колона или таблица
Външен ключ
-Външният ключ в Oracle е референтно ограничение между две таблици.
-Ограничение за външен ключ валидира стойностите на INSERT или UPDATE срещу стойностите в друга колона, или в различна таблица, или друга колона в същата
-Външният ключ винаги дефинира връзка родител/дете. „Родител“ е колоната, която е посочена във външния ключ, а „дете“ е колоната или колоните, които съдържат ограничението за външния ключ.
-По принцип обаче външният ключ е поле (или полета), което сочи към първичния ключ на друга таблица.
-Може да се дефинира на ниво колона или таблица
Проверка на ограничението
Ограничението за проверка на oracle изисква стойност в базата данни, за да отговаря на определено условие. Ограничението за проверка позволява налагането на условно правило върху колона, което трябва да бъде валидирано, преди данните да бъдат вмъкнати в колоната. Условието не трябва да съдържа подзаявка или псевдо колона CURRVAL NEXTVAL, LEVEL, ROWNUM или SYSDATE.
Oracle позволява на една колона да има повече от едно ограничение CHECK. Всъщност няма практическо ограничение за броя на ограниченията CHECK, които могат да бъдат дефинирани за колона.
Може да се дефинира на ниво колона или таблица
Не е нула
Това означава, че редът с данни трябва да има стойност за колоната, посочена като NOT NULL. Сървърът на Oracle няма да позволи да се съхраняват редове, които нарушават това ограничение. Може да се дефинира само на ниво колона, а не на ниво таблица.
Параметър за съхранение на таблица
Таблиците се съхраняват в Oracle Tablespace в базата данни. Ако не е посочено пространство за таблици, таблицата преминава в потребителско таблично пространство по подразбиране.
Така че накратко
1) Трябва да изберете подходящото име на колона и име на таблица съгласно стандарта, даден по-горе. Препоръчително е да дадете име на колона и таблица, така че да можете да идентифицирате целта, като проверите имената
2) Второ, трябва да изберете правилния тип данни на Oracle за таблицата.
Ако това е низ от знаци, трябва да изберем VARCHAR2 (10). Това е променлив низ, трябва да изберем стойността по подходящ начин. Това означава, че може да съхранява знаци до 10 байта. Използваното пространство ще зависи от стойностите в колоната и няма да има загуба на място.
Тук бих подчертал едно нещо, че когато даваме VARCHAR2(10), тук 10 е броят на байтовете, а не на знака.
Броят на символите и байтовете са сходни, когато се включва ASCII символ, но уравнението се променя, ние започнете да използвате символ, различен от ASCII
В момента VARCHAR2 поддържа 4000 байта, ако колоната ви е по-голяма от това, можете да използвате LOB тип данни, който може да съхранява текст за GIGA байта.
Ако е число, ние използваме типа данни Number. Отново можем да изберем стойността по подходящ начин. Пример номер(6,2) Може да съдържа максимум от 999999,99
Ако искате да съхранявате дата, Oracle е предоставил тип данни за дата за съхранение.
3) Идентифицирайте ограничението на таблицата. Решете кой ще бъде първичният ключ и кои всички колони да не са нулеви.
След като имаме цялата необходима информация, можем да продължим със създаването на таблица
Синтаксис за създаване на таблица на Oracle
CREATE TABLE table_name ( col1 datatype [ NULL | NOT NULL ], col2 datatype [ NULL | NOT NULL ], ... col_n datatype [ NULL | NOT NULL ] ) tablespace <tablepace name>;
СИНТАКСИС за първичен ключ за създаване на таблица . Може да се дефинира както на ниво колона, така и на ниво таблица
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>
Пример на първичен ключ за създаване на таблица в oracle
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 създава индекс, за да наложи ограниченията на първичния ключ
Свързано:Въпроси за интервю за Oracle
Обяснението за таблица TEST1
1 | Първата колона се нарича inv_id който е създаден като тип данни char (максимум 7 цифри дължина) и не може да съдържа нулеви стойности |
2 | Втората колона се нарича item_id който е създаден като тип данни char (максимум 7 цифри дължина) и не може да съдържа нулеви стойности |
3 | Третата колона се нарича създаден което е дата тип данни и също така може да съдържа нулеви стойности. |
4 | Четвъртата колона се нарича who която е тип данни char и също може да съдържа нулеви стойности. |
5 | Ограничението на първичния ключ на ниво таблица TEST1_PK е дефинирано върху съставния ключ (INV_ID, ITEM_ID) |
СИНТАКСИС за инструкция за създаване на таблица на oracle FOREIGN Key. Може да се дефинира както на ниво колона, така и на ниво таблица
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) );
Обяснение за таблица EMP
1 | Първата колона се нарича EMP_NO който се създава като число и не може да съдържа нулеви стойности |
2 | Втората колона се нарича emp_name който е създаден като varchar2(50) и не може да съдържа нулеви стойности |
3 | Третата колона се нарича dept_id което е число. |
4 | Четвъртата колона се нарича sal който е числов тип данни и също може да съдържа нулеви стойности. |
5 | Ограничението на първичния ключ на ниво таблица EMP_PK е дефинирано на ключа (EMP_NO) |
6 | Ограничения на външния ключ на ниво таблица dept_fk , което препраща към таблица на dept dept_id |
Изисква се привилегия за създаване на таблица на Oracle
-Трябва да имате привилегията за създаване на система за таблица, за да създадете нова таблица във вашата схема,
- Трябва да имате системните привилегии за създаване на всяка таблица, за да създадете таблица в схема на друг потребител, освен това собственикът на таблицата трябва да има квота за пространството за таблици, което съдържа таблицата, или системните привилегии UNLIMITED TABLESPACE
Свързано:Как да пиша sql заявки
Други характеристики, свързани с таблицата с база данни на Oracle
Кеш/без кеш
Използвайте клаузите CACHE, за да посочите как Oracle Database трябва да съхранява блокове в буферния кеш. Ако не посочите нищо в командата за създаване на таблица, тя по подразбиране е без кеш
ПО ПОДРАЗБИРАНЕ
Стойността, вмъкната в колоната, ако вмъкването или актуализирането ще остави стойността на колоната NULL.
<ПО ПОДРАЗБИРАНЕ <стойност> | NULL>
ПАРАЛЕЛНО
Посочете PARALLEL, ако искате Oracle да избере степен на паралелизъм, равна на броя на наличните CPU във всички участващи екземпляри, умножен на стойността на параметъра за инициализиране PARALLEL_THREADS_PER_CPU.
Компресиране
Това се използва от оракула за съхраняване на таблицата в компресиран формат. Това се предлага от 11g нататък
Коментирайте таблица или колона
Можете да коментирате таблицата с командата
COMMENT ON TABLE <table_name> IS '<comment>';
Oracle създаде таблица със стойност по подразбиране
Понякога искате да присвоите стойност по подразбиране на колоната, ако не е посочена в оператора за вмъкване, тогава можете да създадете таблицата със синтаксиса по-долу. DEFAULT е използваната ключова дума
CREATE TABLE EXP ( NAME VARCHAR2(20), SAL number(8,2) DEFAULT 800, hire_date DATE DEFAULT SYSDATE , birthdate DATE DEFAULT SYSDATE -10 )
Промени по подразбиране на таблицата за създаване на Oracle в 12c
Колони IDENTITY
В Oracle Database 12c можем да дефинираме колони на таблица с SQL ключова дума IDENTITY, която е SQL ключова дума на Американския национален институт по стандартизация (ANSI). Които се увеличават автоматично в момента на вмъкване (като в 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) );
Стойности по подразбиране само за метаданни
Преди Oracle 11g, добавянето на нова колона към съществуваща таблица изискваше всички редове в тази таблица да бъдат променени, за да се добави новата колона. Така че, ако таблицата е много голяма, промяната на колоната за добавяне на таблица отне значително време и време за заключване, както и повече
С Oracle 11g въведе концепцията за стойности по подразбиране само за метаданни. Добавянето на колона NOT NULL с клауза DEFAULT към съществуваща таблица включва само промяна на метаданните, а не промяна на всички редове в таблицата. Заявките на новата колона бяха пренаписани от оптимизатора, за да се увери, че резултатът е в съответствие с дефиницията по подразбиране.
Прочетете повече за това в статията по-долу
Как да променя оракул за добавяне на таблица
Oracle 12c прави това стъпка по-далеч, позволявайки само за метаданни стойности по подразбиране както за задължителни, така и за незадължителни колони. В резултат на това добавянето на нова колона с клауза DEFAULT към съществуваща таблица ще се обработва като промяна само на метаданни, независимо дали тази колона е дефинирана като NOT NULL или не.
Това е огромна полза за всички.
Таблици и изгледи на речника с данни
Цялата информация за таблицата и колоната се съхранява в таблици SYS.TAB$ и SYS.COL$. Oracle предостави изгледи на речник с данни за получаване на информация за таблици и колони
Има три категории изгледи
Как да изброя всички таблици в 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>
Как да определим размера на таблицата
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>’;
Таблици с брой редове и коментари
Заявката по-долу може да се използва за намиране на броя на редовете и коментарите в схемата на 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;
Често задавани въпроси относно таблицата за създаване на Oracle
1. Oracle има ли команда за създаване или замяна на таблица?
Oracle няма команда create или replace table oracle. Създаване или замяна е валидно само за изгледи, PLSQL:процедури само. Трябва да направите промяната само с помощта на команда ALTER Table
Или можете изрично да пуснете таблицата и да я създадете отново
ние нямаме директен, но можете да използвате PLSQL, за да емулирате това
ЗАДАДЕТЕ SERVEROUTPUT ON
DECLARE c_emp int:=0;
BEGIN SELECT count(*) в c_emp FROM dba_tables, където table_name ='EMP';
if c_emp<=0
EXECUTE IMMEDIATE 'създайте таблица EMP (ID NUMBER(3), NAME VARCHAR2( 30) NOT NULL,SAL NUMBER*,2))';
end if;
END;
/
Примерна схема за практикуване
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;
Надяваме се да ви хареса тази статия относно израза, командата, синтаксиса и съветите за създаване на таблица на oracle.
Сродни статии
alter table add column oracle :Полезна информация за това как да промените таблица add column оракул. Подробности за функцията за бързо добавяне на колони, въведена в oracle 11g също са дадени
DROP TABLE ORACLE :Научете за пускането на таблица в Oracle, пускане на таблица, ако съществува в Oracle, пускане на няколко таблици в една команда, пускане на каскадни ограничения на таблици
променете преместване на таблица :Разгледайте тази публикация за метода стъпка по стъпка относно Как да възстановите таблицата в oracle с помощта на alter table move, Как да възстановите таблицата с лобове, дълга колона
Отрязване на TABLE Oracle :Съкратяването на TABLE в Oracle е по-бързо от изтрийте от таблицата в oracle. Това е DDL израз и не задейства тригерите при изтриване
Промяна на таблица в Oracle:Промяна на таблица в Oracle се използва за модифициране на колона, пускане и добавяне на ограничения, промяна на типа данни на колоната на таблицата, промяна на таблицата параметри за съхранение
оракул изброява всички таблици:можем да получим списъка с всички таблици в Oracle чрез запитване на all_tables или user_tables или dba_tables. можем да изберем колоната и клаузата where според нуждите
Допълнително влизане в Oracle
функции за дата на oracle sql
https://docs.oracle.com/cd/B19306_01/server.102/ b14231/tables.htm
Създаване на глобална временна таблица в Oracle