DDL İfadelerini Kullanma

Tablo Oluşturmak ve Yönetmek İçin DDL İfadelerini Kullanma

Şema, şema nesneleri olarak bilinen birden çok veritabanı nesnesinin koleksiyonudur. Bu nesneler, sahip şemalarına göre doğrudan erişime sahiptir. Aşağıdaki tablo şema nesnelerini listeler.

  • Tablo - verileri saklamak için

  • Görünüm - verileri bir veya daha fazla tablodan istenen formatta yansıtmak için

  • Sıra - sayısal değerler oluşturmak için

  • Dizin - tablolardaki sorguların performansını artırmak için

  • Eşanlamlı - bir nesnenin alternatif adı

Veritabanı oluşturmanın ilk adımlarından biri, bir kuruluşun verilerini depolayacak tablolar oluşturmaktır. Veritabanı tasarımı, sipariş girişi, envanter yönetimi ve alacak hesapları gibi çeşitli organizasyonel sistemler için sistem kullanıcı gereksinimlerinin tanımlanmasını içerir. Veritabanı boyutu ve karmaşıklığından bağımsız olarak, her veritabanı tablolardan oluşur.

Tablonun oluşturulması

Veritabanında bir tablo oluşturmak için, bir DBA'nın elinde belirli bilgilere sahip olması gerekir - tablo adı, sütun adı, sütun veri türleri ve sütun boyutları. Tüm bu bilgiler daha sonra DDL komutları kullanılarak değiştirilebilir.

Tablo Adlandırma Kuralları -

  • Bir tablo için seçtiğiniz isim şu standart kurallara uymalıdır:

  • İsim bir AZ veya az harfiyle başlamalıdır

  • Sayı ve alt çizgi içerebilir

  • UPPER küçük harf olabilir

  • 30 karakter uzunluğa kadar olabilir

  • Şemanızdaki mevcut başka bir nesnenin aynı adını kullanamazsınız

  • SQL için ayrılmış bir kelime olmamalıdır

Yukarıdaki yönergelere göre, 'EMP85' geçerli bir tablo adı olabilir, ancak 85EMP değildir Benzer şekilde, UPDATE bir SQL ayrılmış anahtar sözcüğü olduğu için tablo adı olarak seçilemez.

CREATE TABLE ifadesi

CREATE TABLE, veritabanında tablolar oluşturmak için kullanılan bir DDL ifadesidir. Tablo, CREATE TABLE betiği çalıştırılır çalıştırılmaz oluşturulur ve verileri ileriye doğru tutmaya hazırdır. Kullanıcı oluşturmak için CREATE TABLE sistem ayrıcalığına sahip olmalıdır. Tabloyu kendi şemasında.Ancak herhangi bir kullanıcının şemasında bir tablo oluşturmak için kullanıcının HERHANGİ BİR TABLO ŞEMASI OLUŞTURMA'ya sahip olması gerekir.

Temel bir CREATE TABLE ifadesinin sözdizimi aşağıda verilmiştir. Depolama belirtimlerini veya segment değerlerini açıkça sağlamak için birçok ek cümle olabilir.

CREATE TABLE [schema.]table 
          ( { column datatype [DEFAULT expr] [column_constraint] ... 
            | table_constraint} 
         [, { column datatype [DEFAULT expr] [column_constraint] ... 
            | table_constraint} ]...) 
         [AS subquery]

Yukarıdaki sözdiziminde, DEFAULT, sütun yok sayılırsa INSERT deyimi sırasında kullanılabilecek varsayılan değeri belirtir. SYSDATE ve USER dışında diğer tablo sütunlarına veya sözde sütunlara (CURRVAL, NEXTVAL, LEVEL ve ROWNUM) referanslar veya tam olarak belirtilmemiş tarih sabitleri içeremez.

Kısıtlamalar, isteğe bağlı olarak sütun düzeyinde veya tablo düzeyinde tanımlanan kurallardır (bu bölümde daha sonra ele alınmaktadır). Bu kurallar, tablodaki herhangi bir veri eylemi (Ekle, güncelle) sırasında kontrol edilir ve ihlali durumunda eylemi iptal etmek için hata verir.

Örneğin, aşağıdaki CREATE TABLE ifadesi bir EMP_TEST tablosu oluşturur. Sütun özelliklerini, veri türünü ve hassasiyetini not edin.

CREATE TABLE SCOTT.EMP_TEST
(EMPID NUMBER,
ENAME VARCHAR2(100),
DEPARTMENT_ID NUMBER,
SALARY NUMBER,
JOB_ID VARCHAR2(3),
HIREDATE DATE,
COMM NUMBER);

Bir kullanıcı, kullanıcı adını veya şemayı tablo adı ile ön ekleyerek diğer kullanıcının şemasındaki tablolara başvurabilir.Örneğin, bir kullanıcı GUEST, SCOTT'un sahibi olduğu EMP_TEST tablosundan çalışan adını ve maaşını sorgulamak ister. Aşağıdaki sorguyu yapabilir -

SELECT  ENAME, SALARY,
FROM 	GUEST.EMP_TEST;

Bir sütun, tablo oluşturma sırasında varsayılan bir değer tutabilir. Sütuna giren NULL değerlerin kısıtlanmasına yardımcı olur. Varsayılan değer, sütuna uyumlu bir veri türü döndürmesi gereken bir değişmez değer, ifade veya SQL işlevinden çıkarılabilir. Aşağıdaki CREATE TABLE ifadesinde, LOCATION_ID sütununun varsayılan değeri 100 olduğuna dikkat edin.

CREATE TABLE SCOTT.DEPARTMENT
(DEPARTMENT_ID NUMBER,
   DNAME VARCHAR2 (100),
   LOCATION_ID NUMBER DEFAULT 100);

CTAS - Alt sorgu kullanarak tablo oluştur

Bir alt sorgu seçeneği kullanılarak veritabanındaki mevcut bir tablodan tablo oluşturulabilir, tablo yapısının yanı sıra tablodaki verileri kopyalar. Veriler ayrıca koşullara göre de kopyalanabilir. Açıkça empoze edilen NOT NULL kısıtlamalarını içeren sütun veri türü tanımları yeni tabloya kopyalanır.

Aşağıdaki CTAS komut dosyası yeni bir EMP_BACKUP tablosu oluşturur. 20 numaralı departmanın çalışan verileri yeni tabloya kopyalanır.

CREATE TABLE EMP_BACKUP
AS
SELECT * FROM EMP_TEST
WHERE department_id=20;

Veri tipleri

Veri türleri, tablodaki bir sütunun temel davranışını belirtmek için kullanılır. Daha geniş bir temelde, sütun davranışı sayı, karakter veya bir tarih ailesine ait olabilir. Bu ailelere ait çok sayıda başka alt tip vardır.

Sayı veri türü

NUMBER veri türü hem tam sayı, sabit nokta hem de kayan noktalı sayısal değerleri kapsar. Oracle'ın ilk sürümleri bu farklı sayı türlerinin her biri için farklı veri türleri tanımladı, ancak şimdi NUMBER veri türü tüm bu amaçlara hizmet ediyor. bir sütun matematiksel hesaplamalarda kullanılabilecek sayısal verileri depolamalıdır. Bazen, bu numaraların DBMS tarafından sıralı sayılar olarak üretildiği tanımlama numaralarını saklamak için NUMBER veri türü kullanılır.

SAYI (p, s), burada p 38 basamağa kadar olan hassasiyettir ve s ölçektir (ondalık noktanın sağındaki basamak sayısı). Ölçek -84 ila 127 arasında değişebilir.

SAYI (p), sıfır ölçeği ve p hassasiyeti olan sabit noktalı bir sayıdır.

FLOAT [(p)], burada p, 1 ila 126 arasında değişebilen ikili hassasiyettir. P belirtilmezse varsayılan değer ikili 126'dır.

Tarih veri türü

Her bir TARİH veri türü için Yüzyıl, Yıl, Ay, Gün, Saat, Dakika, Saniye veritabanında saklanır. Her veritabanı sisteminin, başlatma parametresi NLS_DATE_FORMAT tarafından tanımlanan varsayılan bir tarih biçimi vardır. Bu parametre genellikle GG-MON-YY olarak ayarlanır. Bir saat belirtmezseniz, varsayılan saat 12:00:00 am şeklindedir.

Karakter veri türü

Oracle, CHAR, VARCHAR, VARCHAR2 ve LONG dahil olmak üzere önceden tanımlanmış üç karakter veri türünü destekler. VARCHAR ve VARCHAR2 aslında eşanlamlıdır ve Oracle, VARCHAR yerine VARCHAR2 kullanılmasını önerir. Sütun sabit uzunluktaki karakter değerlerini depolayacağı zaman CHAR veri türünü kullanın. Örneğin, Amerika Birleşik Devletleri'nde bir Sosyal Güvenlik numarası (SSN) her vatandaşa atanır ve her zaman 9 karakter boyutundadır (bir SSN kesinlikle rakamlardan oluşsa bile, rakamlar karakter olarak değerlendirilir) ve CHAR olarak belirtilir (9). Değişken uzunluktaki alfanümerik verileri depolamak için VARCHAR2 veri türünü kullanın Örneğin, bir müşteri adı veya adresi depolanacak karakter sayısı açısından önemli ölçüde farklılık gösterecektir.Bir VARCHAR2 sütununun maksimum boyutu 4.000 karakterdir.

LOB veri türü

Oracle, CLOB (karakter büyük nesne) ve BLOB (ikili büyük nesne) dahil olmak üzere birkaç farklı LOB veri türü sağlar. Bu veri türlerinin sütunları, metin, görüntü, video ve uzamsal veriler dahil yapılandırılmamış verileri depolayabilir. CLOB veri türü, sekiz terabayta kadar depolayabilir BLOB veri türü, verilerin basitçe "bit" değerlerinin bir akışı olduğu görüntü ve video verileriyle ilişkili olanlar gibi yapılandırılmamış ikili büyük nesneleri depolamak için kullanılır. Bir BLOB veri türü en fazla sekiz terabaytlık ikili veri NCLOB veri türü, karakter büyük nesneleri, 8 TB ila 128 TB'a kadar çok baytlı ulusal karakter kümesinde saklayabilir. BFILE veri türü değeri, sunucunun dosya sisteminde dosyaya bir dosya bulucu veya işaretçi olarak çalışır. Desteklenen maksimum dosya boyutu 8 TB ila 128 TB arasındadır.

Kısıtlamalar

Kısıtlamalar, veri bütünlüğünü sağlamak için Oracle tablolarında tanımlanan kurallar kümesidir.Bu kurallar her sütun veya sütun kümesi için yerleştirilir. Tablo veri eylemine her katıldığında, bu kurallar doğrulanır ve ihlal durumunda istisna oluşturur. Kullanılabilir kısıtlama türleri NOT NULL, Birincil Anahtar, Benzersiz, Kontrol ve Yabancı Anahtar'dır.

Aşağıdaki sözdizimi, sütun düzeyinde kısıtlama uygulamak için kullanılabilir.

Sözdizimi:

column [data type] [CONSTRAINT constraint_name] constraint_type

NOT NULL dışındaki tüm kısıtlamalar tablo düzeyinde de tanımlanabilir. Bileşik kısıtlamalar yalnızca tablo düzeyinde belirtilebilir.

BOŞ DEĞİL Kısıtlama

NOT NULL kısıtlaması, bir veri satırının NOT NULL olarak belirtilen sütun için bir değere sahip olması gerektiği anlamına gelir.Bir sütun NOT NULL olarak belirtilirse, Oracle RDBMS, satırların bu kısıtlamayı ihlal eden çalışan tablosunda saklanmasına izin vermez. tablo düzeyinde değil, yalnızca sütun düzeyinde tanımlanabilir.

Sözdizimi:

COLUMN [data type] [NOT NULL]

UNIQUE kısıtlama

Bazen, birincil anahtar sütunu olmayan bir sütun değeri için benzersizliği zorlamak gerekir. UNIQUE kısıtlaması bu kuralı uygulamak için kullanılabilir ve Oracle benzersiz kısıtlamayı ihlal eden tüm satırları reddeder. Benzersiz kısıtlama, sütun değerlerinin farklı olmasını sağlar , herhangi bir kopya olmadan.

Sözdizimi:

Column Level:

COLUMN [data type] [CONSTRAINT <name>] [UNIQUE]

Table Level: CONSTRAINT [kısıtlama adı] UNIQUE (sütun adı)

Not: Oracle, sütun değerlerinde tekrarlanmayı önlemek için dahili olarak benzersiz bir dizin oluşturur. Dizinler daha sonra PL / SQL'de tartışılacaktır.

CREATE TABLE TEST
( ... ,
  NAME VARCHAR2(20) 
          CONSTRAINT TEST_NAME_UK UNIQUE,
  ... );

Bileşik benzersiz anahtar olması durumunda, aşağıdaki gibi tablo düzeyinde tanımlanmalıdır.

CREATE TABLE TEST
( ... ,
  NAME VARCHAR2(20),
  STD VARCHAR2(20) ,
      CONSTRAINT TEST_NAME_UK UNIQUE (NAME, STD)
 );

Birincil anahtar

Her tablo normalde tabloda depolanan veri satırlarını benzersiz şekilde tanımlayan bir sütun veya sütun kümesi içermelidir. Bu sütun veya sütun kümesine birincil anahtar denir. Çoğu tablonun birincil anahtar olarak tek bir sütunu vardır. anahtar sütunlar NULL'lara ve yinelenen değerlere göre sınırlandırılmıştır.

Dikkat edilecek noktalar -

  • Bir tablonun yalnızca bir birincil anahtarı olabilir.

  • Birden çok sütun, bileşik birincil anahtar altında toplanabilir.

  • Oracle, sütun değerlerinde yinelenmeyi önlemek için dahili olarak benzersiz bir dizin oluşturur. Dizinler daha sonra PL / SQL'de tartışılacaktır.

Sözdizimi:

Column level:

COLUMN [data type] [CONSTRAINT <constraint name> PRIMARY KEY]

Table level:

CONSTRAINT [constraint name] PRIMARY KEY [column (s)]

Aşağıdaki örnek, sütun düzeyinde PRIMARY KEY kısıtlamasının nasıl kullanılacağını gösterir.

CREATE TABLE TEST
( ID  NUMBER CONSTRAINT TEST_PK PRIMARY KEY,
  ...  );

Aşağıdaki örnek, tablo düzeyinde PRIMARY KEY kısıtlaması kullanılarak bileşik birincil anahtarın nasıl tanımlanacağını gösterir.

CREATE TABLE TEST
 ( ...,
   CONSTRAINT TEST_PK PRIMARY KEY (ID) 
 );

Yabancı anahtar

İki tablo, belirli bir sütuna dayalı olarak üst çocuk ilişkisini paylaştığında, alt tablodaki birleştirme sütunu Yabancı Anahtar olarak bilinir. Üst tablodaki ilgili sütunun bu özelliği Bilgi bütünlüğü olarak bilinir. Alt tablodaki Yabancı Anahtar sütun değerleri olabilir ya boş olmalı ya da üst tablonun mevcut değerleri olmalıdır.Lütfen referans alınan tablonun yalnızca birincil anahtar sütunlarının bilgi tutarlılığını zorlamak için uygun olduğunu unutmayın.

Alt tablodaki sütunda yabancı anahtar tanımlanmışsa Oracle üst satırın alt satırlar içeriyorsa silinmesine izin vermez ancak yabancı anahtar tanımlama anında ON DELETE CASCADE seçeneği verilirse Oracle siler Üst satır silinirken tüm alt satırlar. Benzer şekilde ON DELETE SET NULL, üst tablodaki bir satır silindiğinde yabancı anahtar değerlerinin null olarak ayarlandığını gösterir.

Sözdizimi:

Column Level:

COLUMN [data type] [CONSTRAINT] [constraint name] [REFERENCES] [table name (column name)]

Table level:

CONSTRAINT [constraint name] [FOREIGN KEY (foreign key column name) REFERENCES] [referenced table name (referenced column name)]

Aşağıdaki örnek, sütun düzeyinde FOREIGN KEY kısıtlamasının nasıl kullanılacağını gösterir.

CREATE TABLE TEST
(ccode varchar2(5) 
     CONSTRAINT TEST_FK REFERENCES PARENT_TEST(ccode),
   ...
);

Usage of ON DELETE CASCADE clause

CREATE TABLE TEST
(ccode varchar2(5) 
   CONSTRAINT TEST_FK REFERENCES PARENT_TEST (ccode)
   ON DELETE CASCADE,
   ...
);

Kısıtlamayı kontrol edin

Bazen belirli bir sütunda depolanan veri değerleri bazı kabul edilebilir değerler aralığında yer almalıdır. Bir CHECK kısıtlaması, tabloda depolanan her satır için belirtilen kontrol koşulunun doğru veya bilinmemesini gerektirir. Kontrol kısıtlaması, bir koşullu veriler sütuna eklenmeden önce doğrulanması gereken sütun. Koşul, bir alt sorgu veya sözde sütun CURRVAL NEXTVAL, LEVEL, ROWNUM veya SYSDATE içermemelidir.

Oracle, tek bir sütunun birden fazla KONTROL kısıtlamasına sahip olmasına izin verir. Aslında, bir sütun için tanımlanabilen KONTROL kısıtlamalarının sayısında pratik bir sınır yoktur.

Sözdizimi:

Column level:

COLUMN [data type] CONSTRAINT [name] [CHECK (condition)]

Table level:

CONSTRAINT [name] CHECK (condition)

Aşağıdaki örnek, sütun düzeyinde CHECK kısıtlamasının nasıl kullanılacağını gösterir.

CREATE TABLE TEST
( ...,
   GRADE char (1) CONSTRAINT TEST_CHK
   CHECK (upper (GRADE) in ('A','B','C')),
   ...
);

Aşağıdaki örnek, tablo düzeyinde CHECK kısıtlamasının nasıl kullanılacağını gösterir.

CREATE TABLE TEST
( ...,
   CONSTRAINT TEST_CHK
   CHECK (stdate < = enddate),
);

ALTER TABLE ifadesi

Bir DBA, tablo veritabanında oluşturulduktan sonra tablo yapısında veya sütun tanımlarında değişiklikler yapabilir. Bu tür eylemleri gerçekleştirmek için DDL komutu ALTER TABLE kullanılır. Alter komutu, şema nesneleri için özel birden fazla yardımcı program sağlar. ALTER TABLE ifadesi kullanılır tablodaki bir sütunu eklemek, bırakmak, yeniden adlandırmak ve değiştirmek için.

Aşağıdaki ALTER TABLE ifadesi, EMP tablosunu EMP_NEW olarak yeniden adlandırır.

ALTER TABLE EMP RENAME TO EMP_NEW;

Aşağıdaki ALTER TABLE ifadesi EMP_NEW tablosuna yeni bir TESTCOL sütunu ekler

ALTER TABLE EMP_NEW ADD (TESTCOL VARCHAR2 (100))

Aşağıdaki ALTER TABLE ifadesi TESTCOL sütununu TESTNEW olarak yeniden adlandırır.

ALTER TABLE EMP_NEW RENAME COLUMN TESTCOL TO TESTNEW

Aşağıdaki ALTER TABLE ifadesi, EMP_NEW tablosundan TESTNEW sütununu çıkarır.

ALTER TABLE EMP_NEW DROP COLUMN TESTNEW;

Aşağıdaki ALTER TABLE ifadesi EMPLOYEE_ID sütununa birincil anahtarı ekler.

ALTER TABLE EMP_NEW ADD PRIMARY KEY (EMPLOYEE_ID)

Aşağıdaki ALTER TABLE ifadesi birincil anahtarı kaldırır.

ALTER TABLE EMP_NEW DROP PRIMARY KEY;

Aşağıdaki ALTER TABLE ifadesi, tablo modunu salt okunur olarak değiştirir.

ALTER TABLE EMP_NEW READ ONLY;

Salt Okunur Tablolar

Oracle 11g'de salt okunur tablolar bir geliştirme olarak geldi ve tabloların salt okunur amaçla kullanılmasına izin verir. Daha önceki oracle sürümlerinde, tablolar diğer kullanıcılara SELECT ayrıcalığı verilerek salt okunur hale getiriliyordu, ancak sahibi yine de okuma yazma ayrıcalığına sahipti.Ancak şimdi, bir tablo salt okunur olarak ayarlanmışsa, sahibinin bile veri işlemeye erişimi yok .

Sözdizimi:

ALTER TALE [TABLE NAME] READ ONLY
ALTER TALE [TABLE NAME] READ WRITE

İllüstrasyon

SQL>CREATE TABLE ORATEST (id NUMBER)

SQL>INSERT INTO ORATEST VALUES (1);

SQL>ALTER TABLE ORATEST READ ONLY;

SQL> INSERT INTO ORATEST VALUES (2);
INSERT INTO ORATEST VALUES (2)
            *
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."ORATEST"

SQL> UPDATE ORATEST SET id = 2;
UPDATE ORATEST SET id = 2
       *
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."ORATEST"

SQL> DELETE FROM ORATEST;
DELETE FROM ORATEST
            *
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."ORATEST"

SQL> TRUNCATE TABLE ORATEST;
TRUNCATE TABLE ORATEST
               *
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."ORATEST"

SQL> ALTER TABLE ORATEST ADD (description VARCHAR2 (50));
ALTER TABLE ORATEST ADD (description VARCHAR2 (50))
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."ORATEST"

SQL> ALTER TABLE ORATEST READ WRITE;

Table altered.

SQL> DELETE FROM ORATEST;

1 row deleted.

DROP TABLE ifadesi

DROP TABLE deyimi, bir tabloyu veritabanından kaldırmak için kullanılır. Bırakılan tablo ve verileri artık seçim için kullanılamaz. Düşen tablo, geri dönüşüm kutusunda mevcutsa, FLASHBACK yardımcı programı kullanılarak kurtarılabilir. Bir tablonun düşürülmesi, dizini düşürür ve onunla ilişkili tetikleyicileri.

Sözdizimi:

DROP TABLE [TABLE NAME] [PURGE]

Aşağıdaki ifade tabloyu bırakacak ve geri dönüşüm kutusuna yerleştirecektir.

DROP TABLE emp_new;

Aşağıdaki ifade tabloyu düşürür ve geri dönüşüm kutusundan da çıkarır.

DROP TABLE emp_new PURGE;