การใช้งบ DDL
การใช้คำสั่ง DDL เพื่อสร้างและจัดการตาราง
สคีมาคือชุดของอ็อบเจ็กต์ฐานข้อมูลหลายตัวซึ่งเรียกว่าอ็อบเจ็กต์สกีมาอ็อบเจ็กต์เหล่านี้มีการเข้าถึงโดยตรงโดยสคีมาของเจ้าของตารางด้านล่างแสดงรายการอ็อบเจ็กต์สคีมา
ตาราง - เพื่อจัดเก็บข้อมูล
ดู - เพื่อฉายข้อมูลในรูปแบบที่ต้องการจากตารางอย่างน้อยหนึ่งตาราง
ลำดับ - เพื่อสร้างค่าตัวเลข
ดัชนี - เพื่อปรับปรุงประสิทธิภาพของแบบสอบถามบนตาราง
คำพ้องความหมาย - ชื่อทางเลือกของวัตถุ
ขั้นตอนแรกในการสร้างฐานข้อมูลคือการสร้างตารางที่จะจัดเก็บข้อมูลขององค์กรการออกแบบฐานข้อมูลเกี่ยวข้องกับการระบุความต้องการของผู้ใช้ระบบสำหรับระบบต่างๆขององค์กรเช่นการป้อนใบสั่งการจัดการสินค้าคงคลังและบัญชีลูกหนี้ โดยไม่คำนึงถึงขนาดฐานข้อมูลและความซับซ้อนฐานข้อมูลแต่ละฐานประกอบด้วยตาราง
การสร้างตาราง
ในการสร้างตารางในฐานข้อมูล DBA ต้องมีข้อมูลบางอย่างอยู่ในมือเช่นชื่อตารางชื่อคอลัมน์ชนิดข้อมูลคอลัมน์และขนาดคอลัมน์ ข้อมูลทั้งหมดนี้สามารถแก้ไขได้ในภายหลังโดยใช้คำสั่ง DDL
หลักการตั้งชื่อตาราง -
ชื่อที่คุณเลือกสำหรับตารางต้องเป็นไปตามกฎมาตรฐานเหล่านี้:
ชื่อต้องขึ้นต้นด้วยตัวอักษร AZ หรือ az
สามารถมีตัวเลขและขีดล่าง
สามารถอยู่ได้ใน UPPER ของตัวพิมพ์เล็ก
มีความยาวได้สูงสุด 30 อักขระ
ไม่สามารถใช้ชื่อเดียวกันของวัตถุอื่นที่มีอยู่ในสคีมาของคุณ
ต้องไม่ใช่คำสงวนของ SQL
ตามแนวทางข้างต้น 'EMP85' อาจเป็นชื่อตารางที่ถูกต้อง แต่ 85EMP ไม่ใช่ในทำนองเดียวกัน UPDATE ไม่สามารถเลือกเป็นชื่อตารางได้เนื่องจากเป็นคำหลักที่สงวนไว้ของ SQL
สร้างคำสั่งตาราง
CREATE TABLE เป็นคำสั่ง DDL ที่ใช้สร้างตารางในฐานข้อมูลตารางจะถูกสร้างขึ้นทันทีที่เรียกใช้สคริปต์ CREATE TABLE และพร้อมที่จะเก็บข้อมูลเป็นต้นไปผู้ใช้ต้องมีสิทธิ์ระบบ CREATE TABLE เพื่อสร้าง ตารางในสคีมาของตัวเอง แต่ในการสร้างตารางในสคีมาของผู้ใช้ผู้ใช้จะต้องสร้างสคีมาตารางใดก็ได้
นี่คือไวยากรณ์ของคำสั่ง CREATE TABLE พื้นฐานอาจมีส่วนคำสั่งเพิ่มเติมอีกมากมายเพื่อระบุข้อมูลจำเพาะของหน่วยเก็บข้อมูลหรือค่าเซ็กเมนต์อย่างชัดเจน
CREATE TABLE [schema.]table
( { column datatype [DEFAULT expr] [column_constraint] ...
| table_constraint}
[, { column datatype [DEFAULT expr] [column_constraint] ...
| table_constraint} ]...)
[AS subquery]
ในไวยากรณ์ข้างต้น DEFAULT ระบุค่าเริ่มต้นซึ่งสามารถใช้ได้ในระหว่างคำสั่ง INSERT หากคอลัมน์ถูกละเว้น ไม่สามารถมีการอ้างอิงถึงคอลัมน์ตารางอื่น ๆ หรือคอลัมน์หลอก (CURRVAL, NEXTVAL, LEVEL และ ROWNUM) ยกเว้น SYSDATE และ USER หรือค่าคงที่ของวันที่ที่ไม่ได้ระบุไว้อย่างครบถ้วน
ข้อ จำกัด คือกฎที่กำหนดไว้เป็นทางเลือกที่ระดับคอลัมน์หรือระดับตาราง (ครอบคลุมในบทนี้ในภายหลัง) กฎเหล่านี้จะถูกตรวจสอบระหว่างการดำเนินการกับข้อมูล (แทรกอัปเดต) บนตารางและเพิ่มข้อผิดพลาดเพื่อยกเลิกการดำเนินการเมื่อมีการละเมิด
ตัวอย่างเช่นคำสั่ง CREATE TABLE ด้านล่างสร้างตาราง EMP_TEST สังเกตข้อกำหนดของคอลัมน์ชนิดข้อมูลและความแม่นยำ
CREATE TABLE SCOTT.EMP_TEST
(EMPID NUMBER,
ENAME VARCHAR2(100),
DEPARTMENT_ID NUMBER,
SALARY NUMBER,
JOB_ID VARCHAR2(3),
HIREDATE DATE,
COMM NUMBER);
ผู้ใช้สามารถอ้างอิงตารางจากสคีมาของผู้ใช้รายอื่นโดยนำหน้าชื่อผู้ใช้หรือสคีมาด้วยชื่อตารางตัวอย่างเช่น GUEST ผู้ใช้ต้องการสอบถามชื่อพนักงานและเงินเดือนจากตาราง EMP_TEST ซึ่ง SCOTT เป็นเจ้าของ เขาสามารถออกแบบสอบถามด้านล่าง -
SELECT ENAME, SALARY,
FROM GUEST.EMP_TEST;
คอลัมน์สามารถเก็บค่าเริ่มต้นในช่วงเวลาของการสร้างตารางได้ช่วย จำกัด ค่า NULL ที่เข้ามาในคอลัมน์ ค่าดีฟอลต์สามารถอนุมานได้จากฟังก์ชันลิเทอรัลนิพจน์หรือ SQL ซึ่งต้องส่งคืนชนิดข้อมูลที่เข้ากันได้ไปยังคอลัมน์ ในคำสั่ง CREATE TABLE ด้านล่างโปรดทราบว่าคอลัมน์ LOCATION_ID มีค่าเริ่มต้น 100
CREATE TABLE SCOTT.DEPARTMENT
(DEPARTMENT_ID NUMBER,
DNAME VARCHAR2 (100),
LOCATION_ID NUMBER DEFAULT 100);
CTAS - สร้างตารางโดยใช้แบบสอบถามย่อย
สามารถสร้างตารางจากตารางที่มีอยู่ในฐานข้อมูลโดยใช้ตัวเลือกเคียวรีย่อยซึ่งจะคัดลอกโครงสร้างตารางเช่นเดียวกับข้อมูลจากตาราง นอกจากนี้ยังสามารถคัดลอกข้อมูลได้ตามเงื่อนไขข้อกำหนดประเภทข้อมูลคอลัมน์รวมถึงข้อ จำกัด NOT NULL ที่กำหนดไว้อย่างชัดเจนจะถูกคัดลอกลงในตารางใหม่
สคริปต์ CTAS ด้านล่างสร้างตารางใหม่ EMP_BACKUP ข้อมูลพนักงานของแผนก 20 จะถูกคัดลอกลงในตารางใหม่
CREATE TABLE EMP_BACKUP
AS
SELECT * FROM EMP_TEST
WHERE department_id=20;
ประเภทข้อมูล
ชนิดข้อมูลใช้เพื่อระบุลักษณะการทำงานพื้นฐานของคอลัมน์ในตารางโดยพื้นฐานที่กว้างขึ้นลักษณะการทำงานของคอลัมน์อาจเป็นของตัวเลขอักขระหรือตระกูลวันที่มีประเภทย่อยอื่น ๆ อีกหลายประเภทที่อยู่ในตระกูลเหล่านี้
ประเภทข้อมูลตัวเลข
ประเภทข้อมูล NUMBER ประกอบด้วยค่าตัวเลขทั้งจำนวนเต็มจุดคงที่และทศนิยมรุ่นแรก ๆ ของ Oracle ได้กำหนดประเภทข้อมูลที่แตกต่างกันสำหรับแต่ละประเภทของตัวเลขที่แตกต่างกันเหล่านี้ แต่ตอนนี้ประเภทข้อมูล NUMBER ทำหน้าที่ทั้งหมดของวัตถุประสงค์เหล่านี้เลือกประเภทข้อมูล NUMBER เมื่อ คอลัมน์ต้องจัดเก็บข้อมูลตัวเลขที่สามารถใช้ในการคำนวณทางคณิตศาสตร์ได้ในบางครั้งประเภทข้อมูล NUMBER จะถูกใช้เพื่อจัดเก็บหมายเลขประจำตัวโดยที่ DBMS สร้างตัวเลขเหล่านั้นเป็นตัวเลขตามลำดับ
NUMBER (p, s) โดยที่ p คือความแม่นยำสูงสุด 38 หลักและ s คือมาตราส่วน (จำนวนตัวเลขทางด้านขวาของจุดทศนิยม) มาตราส่วนสามารถอยู่ระหว่าง -84 ถึง 127
NUMBER (p) คือตัวเลขจุดคงที่ที่มีมาตราส่วนเป็นศูนย์และมีความแม่นยำเป็น p
FLOAT [(p)] โดยที่ p คือความแม่นยำของไบนารีที่สามารถอยู่ในช่วง 1 ถึง 126 หากไม่ระบุ p ค่าเริ่มต้นคือไบนารี 126
ชนิดข้อมูลวันที่
สำหรับข้อมูล DATE แต่ละประเภทศตวรรษปีเดือนวันชั่วโมงนาทีวินาทีจะถูกเก็บไว้ในฐานข้อมูล ทุกระบบฐานข้อมูลมีรูปแบบวันที่เริ่มต้นที่กำหนดโดยพารามิเตอร์การเริ่มต้น NLS_DATE_FORMAT โดยปกติพารามิเตอร์นี้จะตั้งค่าเป็น DD-MON-YY หากคุณไม่ระบุเวลาเวลาเริ่มต้นคือ 00:00:00 น
ชนิดข้อมูลอักขระ
Oracle สนับสนุนประเภทข้อมูลอักขระที่กำหนดไว้ล่วงหน้าสามประเภท ได้แก่ CHAR, VARCHAR, VARCHAR2 และ LONG VARCHAR และ VARCHAR2 มีความหมายเหมือนกันและ Oracle แนะนำให้ใช้ VARCHAR2 แทน VARCHAR ใช้ประเภทข้อมูล CHAR เมื่อคอลัมน์จะเก็บค่าอักขระที่มีความยาวคงที่สำหรับ ตัวอย่างเช่นหมายเลขประกันสังคม (SSN) ในสหรัฐอเมริกาถูกกำหนดให้กับพลเมืองทุกคนและมีขนาด 9 อักขระเสมอ (แม้ว่า SSN จะประกอบด้วยตัวเลขอย่างเคร่งครัด แต่ตัวเลขจะถือว่าเป็นอักขระ) และจะระบุเป็น CHAR (9). ใช้ประเภทข้อมูล VARCHAR2 เพื่อจัดเก็บข้อมูลที่เป็นตัวอักษรและตัวเลขที่มีความยาวผันแปรได้ตัวอย่างเช่นชื่อลูกค้าหรือที่อยู่จะแตกต่างกันมากตามจำนวนอักขระที่จะจัดเก็บขนาดสูงสุดของคอลัมน์ VARCHAR2 คือ 4,000 อักขระ
ประเภทข้อมูลลอบ
Oracle มีประเภทข้อมูล LOB ที่แตกต่างกันหลายประเภทรวมถึง CLOB (วัตถุขนาดใหญ่ที่มีอักขระ) และ BLOB (วัตถุขนาดใหญ่แบบไบนารี) คอลัมน์ของประเภทข้อมูลเหล่านี้สามารถจัดเก็บข้อมูลที่ไม่มีโครงสร้างรวมถึงข้อความรูปภาพวิดีโอและข้อมูลเชิงพื้นที่ประเภทข้อมูล CLOB สามารถจัดเก็บได้ถึงแปดเทราไบต์ ข้อมูลอักขระโดยใช้ชุดอักขระฐานข้อมูล CHAR ประเภทข้อมูล BLOB ใช้เพื่อจัดเก็บอ็อบเจ็กต์ขนาดใหญ่แบบไบนารีที่ไม่มีโครงสร้างเช่นข้อมูลที่เกี่ยวข้องกับข้อมูลรูปภาพและวิดีโอซึ่งข้อมูลเป็นเพียงสตรีมของค่า "บิต" ประเภทข้อมูล BLOB สามารถจัดเก็บได้ถึง ข้อมูลไบนารีแปดเทราไบต์ชนิดข้อมูล NCLOB สามารถจัดเก็บอ็อบเจ็กต์ขนาดใหญ่ของอักขระในอักขระประจำชาติหลายไบต์ที่ตั้งค่าได้สูงสุด 8TB ถึง 128TB ค่าชนิดข้อมูล BFILE ทำงานเป็นตัวระบุตำแหน่งไฟล์หรือตัวชี้เพื่อจัดเก็บไฟล์บนระบบไฟล์ของเซิร์ฟเวอร์ ขนาดไฟล์สูงสุดที่รองรับคือ 8TB ถึง 128TB
ข้อ จำกัด
ข้อ จำกัด คือชุดของกฎที่กำหนดไว้ในตาราง Oracle เพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์กฎเหล่านี้ถูกบังคับใช้สำหรับแต่ละคอลัมน์หรือชุดของคอลัมน์เมื่อใดก็ตามที่ตารางมีส่วนร่วมในการดำเนินการกับข้อมูลกฎเหล่านี้จะได้รับการตรวจสอบและเพิ่มข้อยกเว้นเมื่อมีการละเมิด ประเภทข้อ จำกัด ที่มีอยู่ไม่ใช่ NULL, Primary Key, Unique, Check และ Foreign Key
คุณสามารถใช้ไวยากรณ์ด้านล่างเพื่อกำหนดข้อ จำกัด ที่ระดับคอลัมน์
ไวยากรณ์:
column [data type] [CONSTRAINT constraint_name] constraint_type
ข้อ จำกัด ทั้งหมดยกเว้น NOT NULL สามารถกำหนดได้ที่ระดับตาราง สามารถระบุข้อ จำกัด ของคอมโพสิตได้ที่ระดับตารางเท่านั้น
ไม่ใช่ข้อ จำกัด ที่เป็นโมฆะ
ข้อ จำกัด NOT NULL หมายความว่าแถวข้อมูลต้องมีค่าสำหรับคอลัมน์ที่ระบุเป็น NOT NULL หากคอลัมน์ถูกระบุว่าไม่ใช่ NULL Oracle RDBMS จะไม่อนุญาตให้จัดเก็บแถวในตารางพนักงานที่ละเมิดข้อ จำกัด นี้ สามารถกำหนดได้ที่ระดับคอลัมน์เท่านั้นไม่ใช่ที่ระดับตาราง
ไวยากรณ์:
COLUMN [data type] [NOT NULL]
ข้อ จำกัด ที่ไม่ซ้ำใคร
บางครั้งจำเป็นต้องบังคับใช้ความไม่ซ้ำกันสำหรับค่าคอลัมน์ที่ไม่ใช่คอลัมน์คีย์หลักสามารถใช้ข้อ จำกัด UNIQUE เพื่อบังคับใช้กฎนี้และ Oracle จะปฏิเสธแถวใด ๆ ที่ละเมิดข้อ จำกัด ที่ไม่ซ้ำกันข้อ จำกัด ที่ไม่ซ้ำกันทำให้แน่ใจได้ว่าค่าคอลัมน์แตกต่างกัน โดยไม่มีรายการที่ซ้ำกัน
ไวยากรณ์:
Column Level:
COLUMN [data type] [CONSTRAINT <name>] [UNIQUE]
Table Level: CONSTRAINT [ชื่อข้อ จำกัด ] UNIQUE (ชื่อคอลัมน์)
หมายเหตุ: Oracle สร้างดัชนีที่ไม่ซ้ำกันภายในเพื่อป้องกันการทำซ้ำในค่าคอลัมน์ดัชนีจะกล่าวถึงใน PL / SQL ในภายหลัง
CREATE TABLE TEST
( ... ,
NAME VARCHAR2(20)
CONSTRAINT TEST_NAME_UK UNIQUE,
... );
ในกรณีของคีย์เฉพาะแบบผสมจะต้องกำหนดไว้ที่ระดับตารางดังต่อไปนี้
CREATE TABLE TEST
( ... ,
NAME VARCHAR2(20),
STD VARCHAR2(20) ,
CONSTRAINT TEST_NAME_UK UNIQUE (NAME, STD)
);
คีย์หลัก
โดยปกติแต่ละตารางจะต้องมีคอลัมน์หรือชุดของคอลัมน์ที่ระบุแถวของข้อมูลที่จัดเก็บในตารางโดยไม่ซ้ำกันคอลัมน์หรือชุดของคอลัมน์นี้เรียกว่าคีย์หลักตารางส่วนใหญ่มีคอลัมน์เดียวเป็นคีย์หลัก คอลัมน์หลักถูก จำกัด ไม่ให้มีค่า NULL และค่าที่ซ้ำกัน
ประเด็นที่ควรสังเกต -
ตารางสามารถมีคีย์หลักได้เพียงคีย์เดียว
หลายคอลัมน์สามารถต่อกันได้ภายใต้คีย์หลักแบบผสม
Oracle สร้างดัชนีเฉพาะภายในเพื่อป้องกันการทำซ้ำในค่าคอลัมน์ดัชนีจะกล่าวถึงใน PL / SQL ในภายหลัง
ไวยากรณ์:
Column level:
COLUMN [data type] [CONSTRAINT <constraint name> PRIMARY KEY]
Table level:
CONSTRAINT [constraint name] PRIMARY KEY [column (s)]
ตัวอย่างต่อไปนี้แสดงวิธีใช้ข้อ จำกัด ของคีย์หลักที่ระดับคอลัมน์
CREATE TABLE TEST
( ID NUMBER CONSTRAINT TEST_PK PRIMARY KEY,
... );
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดคีย์หลักแบบผสมโดยใช้ข้อ จำกัด ของคีย์หลักที่ระดับตาราง
CREATE TABLE TEST
( ...,
CONSTRAINT TEST_PK PRIMARY KEY (ID)
);
คีย์ต่างประเทศ
เมื่อสองตารางแบ่งปันความสัมพันธ์ลูกแม่ตามคอลัมน์ที่ระบุคอลัมน์การรวมในตารางลูกจะเรียกว่า Foreign Key คุณสมบัติของคอลัมน์ที่เกี่ยวข้องในตารางหลักนี้เรียกว่า Referential Integrity ค่าคอลัมน์คีย์ต่างประเทศในตารางลูกสามารถ ไม่ว่าจะเป็นค่าว่างหรือต้องเป็นค่าที่มีอยู่ของตารางหลักโปรดทราบว่าเฉพาะคอลัมน์คีย์หลักของตารางที่อ้างอิงเท่านั้นที่มีสิทธิ์บังคับใช้ความสมบูรณ์ของการอ้างอิง
หากมีการกำหนดคีย์นอกในคอลัมน์ในตารางลูก Oracle จะไม่อนุญาตให้ลบแถวพาเรนต์หากแถวนั้นมีแถวลูกอย่างไรก็ตามหากมีการกำหนดอ็อพชัน ON DELETE CASCADE ในขณะที่กำหนดคีย์นอก Oracle จะลบ แถวลูกทั้งหมดในขณะที่กำลังลบแถวพาเรนต์ในทำนองเดียวกัน ON DELETE SET NULL ระบุว่าเมื่อลบแถวในตารางพาเรนต์ค่าคีย์ต่างประเทศจะถูกตั้งค่าเป็น null
ไวยากรณ์:
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)]
ตัวอย่างต่อไปนี้แสดงวิธีใช้ข้อ จำกัด คีย์ต่างประเทศที่ระดับคอลัมน์
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,
...
);
ตรวจสอบข้อ จำกัด
บางครั้งค่าข้อมูลที่จัดเก็บในคอลัมน์เฉพาะจะต้องอยู่ในช่วงค่าที่ยอมรับได้ข้อ จำกัด การตรวจสอบกำหนดให้เงื่อนไขการตรวจสอบที่ระบุเป็นจริงหรือไม่ทราบสำหรับแต่ละแถวที่จัดเก็บในตารางข้อ จำกัด การตรวจสอบอนุญาตให้กำหนดกฎเงื่อนไขบน a คอลัมน์ซึ่งต้องได้รับการตรวจสอบความถูกต้องก่อนที่จะแทรกข้อมูลลงในคอลัมน์ เงื่อนไขต้องไม่มีแบบสอบถามย่อยหรือคอลัมน์หลอก CURRVAL NEXTVAL, LEVEL, ROWNUM หรือ SYSDATE
Oracle อนุญาตให้คอลัมน์เดียวมีข้อ จำกัด CHECK มากกว่าหนึ่งข้อ ในความเป็นจริงไม่มีการ จำกัด จำนวนข้อ จำกัด CHECK ที่สามารถกำหนดได้สำหรับคอลัมน์ในทางปฏิบัติ
ไวยากรณ์:
Column level:
COLUMN [data type] CONSTRAINT [name] [CHECK (condition)]
Table level:
CONSTRAINT [name] CHECK (condition)
ตัวอย่างต่อไปนี้แสดงวิธีใช้ข้อ จำกัด CHECK ที่ระดับคอลัมน์
CREATE TABLE TEST
( ...,
GRADE char (1) CONSTRAINT TEST_CHK
CHECK (upper (GRADE) in ('A','B','C')),
...
);
ตัวอย่างต่อไปนี้แสดงวิธีใช้ข้อ จำกัด CHECK ที่ระดับตาราง
CREATE TABLE TEST
( ...,
CONSTRAINT TEST_CHK
CHECK (stdate < = enddate),
);
แก้ไขคำสั่งตาราง
DBA สามารถเปลี่ยนแปลงโครงสร้างตารางหรือคำจำกัดความคอลัมน์หลังจากสร้างตารางในฐานข้อมูลแล้วคำสั่ง DDL ALTER TABLE ใช้เพื่อดำเนินการดังกล่าวคำสั่ง Alter จัดเตรียมยูทิลิตี้หลายรายการสำหรับอ็อบเจ็กต์ schema โดยเฉพาะคำสั่ง ALTER TABLE ถูกใช้ เพื่อเพิ่มวางเปลี่ยนชื่อและแก้ไขคอลัมน์ในตาราง
คำสั่ง ALTER TABLE ด้านล่างเปลี่ยนชื่อตาราง EMP เป็น EMP_NEW
ALTER TABLE EMP RENAME TO EMP_NEW;
คำสั่ง ALTER TABLE ด้านล่างเพิ่มคอลัมน์ใหม่ TESTCOL ในตาราง EMP_NEW
ALTER TABLE EMP_NEW ADD (TESTCOL VARCHAR2 (100))
คำสั่ง ALTER TABLE ด้านล่างเปลี่ยนชื่อคอลัมน์ TESTCOL เป็น TESTNEW
ALTER TABLE EMP_NEW RENAME COLUMN TESTCOL TO TESTNEW
คำสั่ง ALTER TABLE ด้านล่างทิ้งคอลัมน์ TESTNEW จากตาราง EMP_NEW
ALTER TABLE EMP_NEW DROP COLUMN TESTNEW;
คำสั่ง ALTER TABLE ด้านล่างเพิ่มคีย์หลักในคอลัมน์ EMPLOYEE_ID
ALTER TABLE EMP_NEW ADD PRIMARY KEY (EMPLOYEE_ID)
คำสั่ง ALTER TABLE ด้านล่างทิ้งคีย์หลัก
ALTER TABLE EMP_NEW DROP PRIMARY KEY;
คำสั่ง ALTER TABLE ด้านล่างนี้จะเปลี่ยนโหมดตารางเป็นแบบอ่านอย่างเดียว
ALTER TABLE EMP_NEW READ ONLY;
อ่านเฉพาะตาราง
ตารางอ่านอย่างเดียวเป็นส่วนเสริมใน Oracle 11g ช่วยให้สามารถใช้ตารางเพื่อการอ่านอย่างเดียว ใน Oracle เวอร์ชันก่อนหน้านี้ตารางถูกสร้างให้อ่านโดยให้สิทธิ์ SELECT แก่ผู้ใช้รายอื่นเท่านั้น แต่เจ้าของยังคงมีสิทธิ์อ่านเขียน แต่ตอนนี้ถ้าตารางถูกตั้งค่าเป็นอ่านอย่างเดียวแม้แต่เจ้าของก็ไม่สามารถเข้าถึงการจัดการข้อมูลได้ .
ไวยากรณ์:
ALTER TALE [TABLE NAME] READ ONLY
ALTER TALE [TABLE NAME] READ WRITE
ภาพประกอบ
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
คำสั่ง DROP TABLE ใช้เพื่อลบตารางออกจากฐานข้อมูล ตารางที่ตกหล่นและข้อมูลจะไม่สามารถเลือกได้อีกต่อไปตารางที่ดร็อปสามารถกู้คืนได้โดยใช้ยูทิลิตี้ FLASHBACK หากมีอยู่ในถังรีไซเคิลการทิ้งตารางจะลดดัชนีและทริกเกอร์ที่เกี่ยวข้อง
ไวยากรณ์:
DROP TABLE [TABLE NAME] [PURGE]
ข้อความด้านล่างจะวางตารางและวางลงในถังรีไซเคิล
DROP TABLE emp_new;
ข้อความด้านล่างนี้จะวางตารางและล้างออกจากถังรีไซเคิลด้วย
DROP TABLE emp_new PURGE;