คุณสมบัติของ view file · web...

19
กกกกกกกกกกกกกกกกกกกก Database Objects กกกกก จจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจ (Database Objects) จจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจ Objects จจจจจจจจ จจจจจจจจจจ กกกกก กกกกกกกกก View จจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Sequence จจจจจจจจจจจจจจจจจจจจจจจจจจ (PK) จจจจจจจจจจจจจจจจจ Index จจจจจจจจจจจจจจจ(Query) จจจจจจ จจจจจจจจจจจจจจจจจจจจ Synonym จจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจ (object) จจจจจจจ จ กกกกกกกกกกกกกกกกกกกกกกกกก กกกกกก object กก กกกกกกกกก Oracle จจจจจจจจจจจจจจจจ object จจจจจจจจจจจจ จจจจจจ Oracle (จจจจ table, view จจจ) จจจจจจจจจจจจจจจจจจจ view จจจจจจจจจจ ALL_OBJECTS จจจจจจจจจจจจจจจจจจจจจจจจจจจจจ จจจจจ SELECT * FROM ALL_OBJECTS;

Upload: trinhlien

Post on 15-May-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

การสรางและการจดการ Database Objects อนๆ

จากบททผานมา เราไดทราบกนแลววาวตถตางๆในฐานขอมล (Database Objects) ประกอบไปดวยอะไรบางนน ในบททจะกลาวถง Objects ทเหลอ ซงไดแก

วตถ การใชงานView ใชสำาหรบดงขอมลออกมาโชวแตไมสามารถ

จดการกบขอมลไดSequence ใชสำาหรบการสรางคยหลก (PK) ใชในการนอ

มอลเรตIndex ชวยใหการควร(Query) ขอมลมประสทธภาพ

มากขนSynonym ใชสำาหรบการตงชอใหกบวตถ (object) ตวอน

คำาสงทใชในการเรยกด รายการ object ในฐานขอมล Oracle

การเรยกดรายการ object ทงหมดในฐานขอมล Oracle (เชน table, view ฯลฯ) สามารถเรยกดไดจาก view ทชอวา ALL_OBJECTS ตวอยางคำาสงคอทใชเรยกดคอ

SELECT * FROM ALL_OBJECTS;

โดยคำาสงนจะแสดงรายการ object ทงหมดทม

แตในการใชงานสวนใหญ อาจจะตองการเจาะจงดแคบางเงอนไข เชน ตองการดรายการ table ทงหมด โดยเจาะจงแค schema ใด schema หนงเทานน ซงสามารถใชเงอนไขจากฟลดตอไปน คอ OBJECT_TYPE เปนการเรยกดตามเงอนไขของประเภท object เชน หากตองการดเฉพาะ table จะใชเงอนไขเปน WHERE OBJECT_TYPE = ‘TABLE’OWNER เปนการเรยกดเฉพาะเจาะจง schema ใด schema หนง เชน ตองการเรยกดขอมลจาก schema ชอ SCOTT จะใชเงอนไขเปน WHERE OWNER = ‘SCOTT’

ตวอยางคำาสงเตม ๆ กรณทตองการเรยกดเฉพาะ table ทงหมดทอยใน schema ทชอ SCOTT

SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE=’TABLE’ AND OWNER=’SCOTT’;

Database Objects – VIEW

จากการใชงาน SQL Select statement จะเหนวา ในบางครงเรามกจะม Select statement ทตองใชงานประจำาเพอดงขอมลออกมาในรปแบบทตองการ เราสามารถใช SQL View นชวยได โดย SQL View จะทำาการเกบรปแบบการ query หรอ SQL Select statement ทเราตงไวใน SQL View ซงสามารถทำาไดตงแต query ขอมลทงหมดของ table รวมถงการทำา SQL Join, SQL Union, SQL Intersect และ SQL Except ทผลลพธออกมาในรปแบบตาราง หรอ table 

คณสมบตของ VIEW

สรางโครงสรางของขอมลในรปแบบท user ใชงานปกตจาก table

ปรบเปลยนขอมลภายใน table ใหแสดงออกมาในรปแบบทตองการ โดยไมกระทบกบขอมลหลก

สรปขอมลจาก table ในรปแบบของ report ท user ตองการ

 รปแบบการสราง VIEW (Syntax)

การใชงาน SQL View สามารถสรางไดจากรปแบบของ SQL Select statement ทตองการ โดยสามารถสรางจาก table เดยว หรอ หลาย table กได แตตองมสทธในการเขาถงขอมลภายใต table นน (GRANT VIEW)

CREATE VIEW view_name ASSELECT column1, column2.....FROM table_nameWHERE [condition];

ตวอยางคำาสง VIEW TABLETable – CUSTOMERS

 ทำาการสราง VIEW จากการ Select 2 col ไดแก name, age ซงเปนขอมลทไดมาจาก table-CUSTOMERS

CREATE VIEW CUSTOMER_VIEW ASSELECT name, ageFROM CUSTOMERS;

ผลลพธทได จากการลอง select ขอมลใน VIEW

SQL > SELECT * FROM CUSTOMER_VIEW;

กำาหนดเงอนไข WITH CHECK OPTIONWITH CHECK OPTION กำาหนดมาเพอใชงานการ CREATE VIEW statement เปาหมายของ WITH CHECK OPTION มเพอใหมนใจไดวาการ INSERT หรอ UPDATE ขอมลอยในเงอนไขของ VIEW ซงถาไมอยในเงอนไข การ INSERT หรอ UPDATE นนจะไดผล error

CREATE VIEW CUSTOMER_VIEW1 ASSELECT name, age, salaryFROM CUSTOMERSWHERE age IS NOT NULLWITH CHECK OPTION;

ดวยเงอนไข WITH CHECK OPTION จะเหนวาขอมล column age หามมคาเปน NULL

การ UPDATE VIEW

View จะสามารถ update ภายใตเงอนไข statement ดงน SELECT clause หามใช DISTINCT, summary

function, set function, set operator, ORDER BY FROM clause หาม JOIN table WHERE clause หามใชรวมกบ subquery หามใชงาน GROUP BY และ HAVING NOT NULL column ทงหมดจะตองอยใน VIEW ดวยเพอให

INSERT function ทำางานถกตอง

ถาเงอนไขทงหมดถกตอง เราจงสามารถใชงาน SQL VIEW update ได

ตองการแกไขขอมลของ Ramesh ใหมอายเทากบ 35

UPDATE CUSTOMER_VIEW SET AGE = 35 WHERE name = 'Ramesh';

ผลลพธทได

  การ INSERT VIEW

ใชเงอนไขเดยวกบ UPDATE VIEW ซงจากตวอยาง เราไมสามารถทำาการ INSERT VIEW บน CUSTOMERS_VIEW นไดเพราะ column ทงหมดของ VIEW ไมไดมเงอนไข NOT NULL ทงหมด

การ DELETE VIEW

ใชเงอนไขเดยวกบ UPDATE VIEW และ INSERT VIEWทำาการลบขอมลของคนทมอาย 22 ออกจาก VIEW

คำาสง

DELETE FROM CUSTOMER_VIEW WHERE age = 22;

ผลลพธทได

 รปแบบการลบ VIEW (Syntax)

DROP VIEW view_name;

 ตวอยางการ DROP VIEW

DROP VIEW CUSTOMER_VIEW;

  Database Objects – Sequence

บางครงการทำางานเกยวกบการจดเกบขอมลลง Table จะมขอมลบางสวนทถกจดเกบแบบ Sequence ซงสวนใหญจะเปนขอมลจำาพวก Id ตางๆ ถาเปน Access กจะม Auto running number ให หรอ worst case เรากจะ Select Id ลาสดมา แลวบวกเขาไป 1 แลวจดเกบลงไปอกท

รปแบบคำาสงการสราง Sequence

ตวอยางคำาสงการสราง Sequence

CREATE SEQUENCE sequence_name MINVALUE value [MAXVALUE value] START WITH value INCREMENT BY value CACHE value;

ตวอยางดานบนคอการสราง sequence ชอ CUSTOMER_seq โดยเรมตนคาท 1 และเพมคาทละ 1 (ie: 2,3,4,..) และจะมการดงขน cache ทละ 20 คา ซงจะชวยในสวนของ performance.

ถาเราไมใส คา MAXVALUE sequence ทเราสรางขนจะ default เปน:

MAXVALUE 999999999999999999999999999

ดงนน เราสามารถทจะสราง sequence แบบงายๆ ดวยคำาสงดานลาง :

หลงจากททำาการสราง sequence เสรจเรยบรอย สำาหรบการเรยกใช เราจะเรยกโดยใชคำาสง .nextval

ตวอยางคำาสงการใชงาน Sequence

CREATE SEQUENCE CUSTOMER_seq MINVALUE 1 MAXVALUE 999999999999999999999999999 START WITH 1

CREATE SEQUENCE CUSTOMER_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20;

CUSTOMER_seq.nextval;

คำาสงดานบนจะทำาการดงคาจาก CUSTOMER_seq โดยเราสามารถนำา .nextval มาใชใน SQL statement. ไดตามตวอยางดานลาง

ตวอยางการประยกตใช SEQUENCE รวมกบคำาสง INSERT

ตวอยางดานบน จะทำาการ  insert new record ลงใน table CUSTOMERSสำาหรบ column id  จะเกบคาทเราดงมากจาก sequence CUSTOMER_seq และ column  name จะเกบเปน Kraft

การลบ Sequence ออกจากฐานขอมล Oracle (Drop Sequence)

รปแบบคำาสงการลบ Sequence

ตวอยางคำาสงการลบ Sequence

INSERT INTO CUSTOMERS (id, name)VALUES

DROP SEQUENCE sequence_name;

DROP SEQUENCE CUSTOMER_seq;

Database Objects – Index

การทำา Index ของ Database มประโยชนในการคนหาขอมล Query ไดรวดเรว โดยการคนหาจะเปนการกระโดดไปยงตำาแหนงทตองการไดเลย ทำาใหไมจำาเปนทจะตองคนหาหมดทก Row ทำาให Query ไดเรวกวาเดมมาก

คำาสงสราง Index (CREATE INDEX)SQL Create index statement

CREATE INDEX index_name ON table_name;

การเลอกใช SQL index แตละแบบ จะขนอยกบรปแบบการใชงาน SQL Select query statement วาสวนของ Where Clause สวนมากใชงานกบ column ไหน กควรจะตองทำา index column นน หรอถามการทำาเงอนไขหลาย column รวมกน กควรใช composite index

1. Index แบบ 1 column (Single-Column Indexes)

CREATE INDEX index_nameON table_name (column_name);

 

2. Index แบบไมซำา (Unique Indexs)มผลตอประสทธภาพในการ query หรอ select ขอมลทรวดเรว เพราะขอมลจะตองไมซำากน

CREATE UNIQUE INDEX index_nameON table_name (column_name);

 

3. Index แบบหลาย column (Composite Indexs)

CREATE INDEX index_nameOn table_name (column1, column2);

4. Implicit Indexsเปน index ทถกสรางขนมาอตโนมตตงแตเรมสราง table เชน ถามการกำาหนด Primary Key constraint หรอ Unique Constraint 

คำาสงลบ Index (DROP INDEX)

DROP INDEX index_name;

คำาเตอน การ – drop index อาจจะทำาให performance ของการ select บางคำาสงชาลงอยางมาก เพราะฉะนนตองตรวจสอบใหแนใจกอนทำาการ drop 

ขอควรระวงการใช Index

ถงแมวาการทำา index จะชวยเพมประสทธภาพของฐานขอมล หรอ database แตสถานการณการทำา index กไมมผลดเสมอไปเชน

Index ไมควรทำาใน table ทมขอมลนอย Table ทมการทำา insert หรอ update บอยๆ ดวยขอมล

จำานวนมาก Index ไมควรทำากบ column ทมคา NULL จำานวนมากใน

column Column ทมการปรบเปลยนโครงสรางบอยๆ ไมควรทำา

index 

ตวอยางการใชงาน Index

1. ถาจะสรางตาราง โดยจะใช field ทเราใชเปนเงอนไขในการ query บอยๆ กสามารถสรางตารางไดเลย เชน

CREATE TABLE MyTransactionLogs(myKey INT AUTO_INCREMENT NOT NULLmyIndex TIMESTAMP NOT NULLdata1 VARCHAR(100)data2 VARCHAR(100)data3 VARCHAR(100)etc VARCHAR(255)PRIMARY KEY(myKey)INDEX (myIndex));

2. ถาตองการปรบปรงตาราง ทสรางไปแลว เพอจด index ใหขอมลในฟลด myIndex ถา myIndex ไมไดสงใหเปน index ตงแตตอนสรางตาราง กสามารถใชคำาสง ขางลางน จะทำาให Query เรวขนมาก

การจดการ index ของตารางทมฐานขอมลอยแลว จะเปนการนำาขอมลทงหมดของฟลดทเราตองการจด index มาจดเรยง ทำาใหเราตองเสยพนท (disk space) ในการจดเกบขอมลเพมขน ดงนนจงไมควรจด index ใหกบทกฟลดในตาราง ซง Field ทควรจดเกบควรมคณสมบตดงตอไปน

Field ทใชเปนเงอนไขในการคนหาขอมล (เวลา query อยหลง WHERE กคอ Field ทควรทำา Index)

จด index ใหกบฟลดทใชในการจดเรยง (GROUP BY, ORDER BY)

จด index ใหกบ Foreign Keys ทเราเอาไว JOINและขนตอนในการจด index จะใชเวลาพอสมควรขนอยกบจำานวนของขอมลวามมากนอยเพยงใด แตถามขอมลเปนหลก ลาน หรอมากกวานนกจะใชเวลามากขน

โดยขณะทกำาลงจด index อย ตารางจะถก locked ไว เพอไมใหใครมา insert/update/delete ได ถาตารางขอมลกำาลงรนอยท

ALTER TABLE MyTransactionLogs ADD INDEX(myIndex);

production และตองมการใชงานอยตลอดเวลา คณอาจจะเลยงไปทำาตอนทม traffic การใชงานนอย เชน ชวงต 3 - ต 4 ซงเปนชวงน traffic นอยทสด

Database Objects – Synonym

Synonym สรางขนเพอเปนชอเลนของ Database Object ตวอนๆเพอความสะดวกในการอางถง เรามกจะสราง Synonym ใหมชอสนกวาชอของ Database Object ทเราตองการอางถง โดยท Synonym ม 2 ประเภท คอ

1. Private Synonym สรางขนและถกเรยกใชภายใตผใชทเปนคนสราง

2. Public Synonym สรางขนและกำาหนดใหผใชอนๆ (อนๆทไดรบสทธการใช) สามารถเรยกใชไดดวย

คำาสงสราง Synonym (CREATE Synonym)SQL Create synonym statement กอนอนตอง

connect by SYSTEM กอน เพอใหม Permission ถงทจะสราง Synonym ได

โดยท OBJECT คอ ชอ Database Object ทตองการสราง Synonym เพออางถง

ตวอยางการใชคำาสงสราง Synonym

CREATE [PUBLIC] SYNONYM SYNONYM_NAMEFOR OBJECT

เมอทำาการ Create Synonym สำาเรจแลว ระบบจะแสดง message "synonym emp created." เปนการสราง synonym ชอ emp สำาหรบการอางองถงตาราง Employees

ตวอยางการใชงาน Synonym

เปนการเรยกดขอมลในคอลมน employee_id, first_name จากตาราง employees แตอางถง table ชอ employees โดยใช Synonym ชอ emp

คำาสงลบ Synonym (Drop Synonym)

DROP SYNONYM TABLE

ตวอยางการใชคำาสงลบ Drop Synonym

เมอทำาการลบ Synonym สำาเรจ ระบบจะแสดง message "synonym emp dropped."

Select employee_id, first_nameFrom emp;

DROP SYNONYM SYNONYM_NAME;

CREATE SYNONYM emp FOR EMPLOYEES;

DROP SYNONYM emp;