boykap.files.wordpress.com · Web view2018-09-23 ·...
Transcript of boykap.files.wordpress.com · Web view2018-09-23 ·...
การสรางและการจดการตาราง (Table)
วตถตางๆในฐานขอมล (Database Objects)
ออบเจกตฐานขอมล หรอ Database Objects เปนสวนประกอบตางๆทอยภายในฐานขอมล เปน logical structure หนงทใชอางองขอมลของฐานขอมล โดยแตละ object ในฐานขอมลจะอยภายใต user ใด user หนงเสมอ ซงประกอบไปดวย
วตถ การใชงานTable ใชสำาหรบเกบขอมล มแนวแถว (row) และแนว
คลอลมน (column)View ใชสำาหรบดงขอมลออกมาโชวแตไมสามารถ
จดการกบขอมลไดSequence ใชสำาหรบการสรางคยหลก (PK) ใชในการนอ
มอลเรตIndex ชวยใหการควร(Query) ขอมลมประสทธภาพ
มากขนSynonym ใชสำาหรบการตงชอใหกบวตถ (object) ตวอน
ๆ
กฎการตงชอ1. ตองขนตนดวยตวอกษรเทานน2. ความยาวในการตงชอจะอยระหวาง 1 - 30 ตวอกษร 3. ตวอกษรทสามารถใชไดคอ A – Z, a – z, 0 – 9, _ , $ ,
#4. หามตงชอซำากนภายใน User เดยวกน
5. ไมสามารถใชคำาสงวนมาตงชอได เชน ชอฟงชน ชอคำาสงตาง ๆ เปนตน
การสรางตาราง (Create table)
กอนทจะมการสรางตารางในฐานขอมล ผใชจะตองสามารถเขาไปใชงาน database และไดรบสทธในการสรางตาราง รวมถงมพนทในการจดเกบขอมลเปนทเรยบรอยแลว ถงจะสามารถทำาการสรางตารางทเอาไวสำาหรบเกบของมลทตองการ โดยใชคำาสง SQL Create table statement ซงขอมลแบบตาราง ผใชจำาเปนตองกำาหนดชอของ table และชอของ column รวมถง data type และ data size ของแตละ column วาจะใชเกบขอมลชนดใด
รปแบบคำาสง (Syntax)SQL Create table statement ขอมลทตองระบคอ table name, column name, data type, data size
คำาสง CREATE TABLE เปน keyword เพอบอกกบ database วาเราตองการทำาอะไร ในทนคอสรางตารางใหม ทชอตองไมซำากบ
CREATE TABLE table_name(
column1 datatype(datasize),
column2 datatype(datasize),
column3 datatype(datasize),
.....
columnN datatype(datasize ,
PRIMARY KEY( one or more columns )
);
ตารางเดมทมอยในฐานขอมล โดยตองใชรปแบบตามตวอยางทกำาหนดไว หลงจากนนในสวนของวงเลบทตามมา จะเปนการกำาหนดขอมลแตละ column ของ table วา data type ทจะใชคอขอมลประเภทใด
หมายเหต : - ในวงเลบเปนชอ คลอลมน (column) ชนดขอมล (data
type) และขนาดของขอมล (data size)- หากมหลายคลอลมนใหคนดวยเครองหมายคอมมา (,)
หลกในการกำาหนดคาคงทใหกบ คลอลมนททำาการสรางขนมาใหม
- SYSDATE ใชสำาหรบโชววนทปจจบนของเครอง- จะเอาคาทอยในคลอลมนอน มาเปนคาคงทไมได- ชนดของขอมลกบชนดของขอมลในคลอลมนจะตองตรงกน
ตวอยางการสรางตาราง
การเรยกด Data Dictionary ของเราทเราสรางเสรจไป ใหใชคำาสง DESCRIBE หรอ คำายอคอ DESC
………hire_date DATE DEFAULT SYSDATE,………………
CREATE TABLE dept(deptno NUMBER(2),dname VARCHAR2(14),loc VARCHAR2(13),create_date DATE DEFAULT SYSDATE);
ชนดของขอมล (data types)
SQL data types เปนการกำาหนดชนดของขอมลในตารางวาเปนขอมลแบบใด เชน ขอมลตวเลข, ตวอกษร, วนเวลา หรอ แบบไมมโครงสราง ซงสงเหลานจำาเปนตงแตเราเรมสราง database table เพอใหขอมลทเราจะใสลงส table มความถกตองตามทวางเอาไว อกทงยงชวยใหฐานขอมลหรอ database ของเราทำางานไดงายขนในการจดเกบ และการทำาดรรชน (index) ไดเหมาะสมกบขอมลทเราจะใชงาน โดย data types บน database มดวยกนหลายชนด ขนอยกบชนดของฐานขอมล หรอ database ทเราใชงาน
ชนดขอมล คำาอธบาย
CHARACTER(n) Character string จำากดจำานวนตวอกษรเทากบ n ตว
VARCHAR(n) or CHARACTER VARYING(n)
Character string จำากดจำานวนตวอกษรไมมากกวา n ตว
BINARY(n) Binary string จำากดจำานวนตวอกษรเทากบ n bytes
VARBINARY(n) or BINARY
Binary string จำากดจำานวนตวอกษรไมมากกวา n bytes
VARYING(n)
BOOLEAN TRUE หรอ FALSE คอขอมลแบบตรรกศาสตร
INTEGER(p) ตวเลขจำานวนเตม p หลก SMALLINT ตวเลขจำานวนเตม 5 หลก INTEGER ตวเลขจำานวนเตม 10 หลก BIGINT ตวเลขจำานวนเตม 19 หลก
DECIMAL(p,s) ตวเลขทมจำานวนทงหมด p หลก เปนทศนยม s หลก และ จำานวนเตม p-s หลก
NUMERIC(p,s) ตวเลขทมจำานวนทงหมด p หลก เปนทศนยม s หลก และ จำานวนเตม p-s หลก
FLOAT(p) ตวเลขคาประมาณรปทศนยมจำานวน p หลก
REAL ตวเลขคาประมาณรปทศนยมจำานวน 7 หลก
FLOAT ตวเลขคาประมาณรปทศนยมจำานวน 16 หลก
DOUBLE PRECISION
ตวเลขคาประมาณรปทศนยมจำานวน 16 หลก
DATE ขอมล วน,เดอน,ป TIME ขอมล ชวโมง นาท วนาท TIMESTAMP ขอมล วน เดอน ป ชวโมง นาท วนาท INTERVAL ขอมลความตางในทางเวลา ARRAY ชดของขอมลทมการจดเรยง
MULTISET ชดของขอมลทไมมการจดเรยง อาจะมขอมลซำาได
XML ขอมลชนด XML
การระบกฏและขอบงคบของขอมลในตาราง (Constraint)
ในการ Create table จำาเปนตองระบชอ column รวมถง data type ของแตละ column เพอใหผทใชงาน table นสามารถขอมลมาใสลงในตาราง ไดถกตองตามวตถประสงค ซงนอกจากนเรายงสามารถกำาหนดเงอนไขพเศษสำาหรบ column หรอทง table ไดดวย เพราะใหขอมลทถกเกบใน table สามารถเอาไปใชงานไดตรงตามความตองการ เราเรยกการกำาหนดเงอนไข หรอ ขอจำากดนวา Constraint ซงขอจำากดตอไปนทสวนมากสามารถใชไดบน database
NOT NULL Constraint − กำาหนดใหขอมลทใสใน column ตองมคาไมเทากบ NULL หรอ ไมมขอมล
DEFAULT Constraint − กำาหนดคาเรมตน (default) ของขอมลใน column ถาไมมการกำาหนดมาใหตอนแรก
UNIQUE Constraint − กำาหนดใหขอมลใน column ทงหมดตองไมซำากน
PRIMARY Key − กำาหนดให column มคณสมบตเปน PRIMARY Key คอ คาใน column นนตองเปนแบบ UNIQUE และ NOT NULL
FOREIGN Key − กำาหนดให column นนจำาเปนตองอางองขอมลทมภายในอก table หนงทเปน PRIMARY Key column
CHECK Constraint – กำาหนดเงอนไขของขอมลใน column วาตองมคาเปนอยางไรเทานน
INDEX − ใชสรางดรรชนเพอใหระบบคนหาขอมลทอางองจาก column นนไดรวดเรวขน
โดย constraint ทงหมดนจะถกกำาหนดตงแตเรมสราง Create table หรอ เรมเปลยนภายหลงดวยคำาสง Alter table เพอสราง constraint บน table ทมอยแลว
การเพมคา Constraints ใหกบคลอลมน มทงหมด 5 ชนด คอ
คา Constraints
ตวยอ ความหมาย
NOT NULL NN จะตองมคา หามเปนคาวาง UNIQUE UK หามมคาซำากนในคลอลมน ขอมลใน
คลอลมนจะตองซำากนPRIMARY KEY PK คยหลกFOREIGN KEY FK คยรองCHECK CK ตรวจสอบเงอนไขตามทเรากำาหนด
เชน ชาย = 1 หญง = 2 หากกรอกเปนอยางอน มนจะฟอง Error
ขอกำาหนด ในการกำาหนดคา Constraint
- จะทำาการสรางไปพรอม ๆ กบการสรางตาราง- ในการกำาหนดคา Constraint อาจจะกำาหนดในลำาดบของ
คลอลลมนหรอตารางกได- เราสามารถดผลของการกำาหนดคา Constraint ไดโดยใช
คำาสง DESC- กาตงชอ Constraint พยายามตงชอ Constraint ใหสอ
ถงชอตาราง ชอคอลลมน และ Constraint ทใช เชน หากตองการตงชอ Constraint ใหกบคลอลมน employee_id ของตาราง employees ใหเปน primary key จะสามารถตงไดโดย ใชชอยอของทงชอตาราง ชอคอลลมน และชอ Constraint จะไดวา emp_emp_id_pk เปนตน
รปแบบการกำาหนดคา Constraint
รปแบบการกำาหนดคา Constraint ในระดบของคลอลมน
รปแบบการกำาหนดคา Constraint ในระดบของตาราง
CREATE TABLE (schema,] table[column datatype [DEFAULT expr][column_constraint],………..][table_constraint] [,…………..]);
Column [CONSTRAINT constraint_name] constraint_type,
Column1,Column2,…………,Columnn[CONSTRAINT constraint_name] constraint_type
- constraint_name = ชอของ Constraint- constraint_type = ชนดของ constraint
ตวอยางการกำาหนดคา Constraint ในระดบของคลอลมน
ตวอยางการกำาหนดคา Constraint ในระดบของตาราง
การกำาหนดคา Constraint แบบ NOT NULL
CREATE TABLE employees (employee_id NUMBER(6) CONSTRAINT emp_emp_id_pk PRIMARY KEY, first_name VARCHAR2(20),
CREATE TABLE employees (employee_id NUMBER(6) first_name VARCHAR2(20), ........ job_id VARCHAR2(10), CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id);
ขอมลในตาราง EMPLOYEES
…..
ตวอยางการกำาหนดคา Constraint แบบ Not NullLast_name varchar2(25) Not Null, หรอLast_name varchar2(25) Constraint emp_last_name_nn Not Null,
การกำาหนดคา Constraint แบบ UNIQUE
……
หามเปนคาวางเนองจากเปนคย มการกำาหนดคา
Constraint เปน
ไมไดถกกำาหนดใหเปน NOT NULL
เพมขอมลอเมลลเขาไป
อเมลลทเพมเขาไปหาม
โปรแกรมจะไมอนญาตใหเพมขอมลอเมลลทซำากนเขาไปในระบบเนองจากมการกำาหนดคา
โปรแกรมจะอนญาตเพราะ Email ชอ ISCIARRA ยงไมม
- สามารถกำาหนดไดทงในระดบของตาราง และระดบของคอลลมน
การกำาหนดคา Constraint แบบ PRIMARY KEY- ขอมลหามเปนคาวาง (nn)- ขอมลหามซำากน (uk)
ขอมลในตาราง DEPARTMANTS
…….
CREATE TABLE employees ( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25) CONSTRAINT emp_email_uk UNIQUE, salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL, ....... CONSTRAINT emp_email_uk UNIQUE (email));
เพมขอมลเขาไปใน
การกำาหนดคา Constraint แบบ Foreign Key- คยรรอง ใชอางอง อกตารางหนง
ตาราง Departments
ตาราง Employees
เพมขอมลเขาไปใน
โปแกรมไมอนญาตเนองจาก
โปแกรมไมอนญาตเนองจาก PRIMARY
คย
- สามารถกำาหนดไดทงในระดบของตาราง และระดบของคอลลมน
การกำาหนดคา Constraint แบบ CHECK- CHECK ทำาหนาทในการตรวจสอบวาขอมลทเราจะทำาการ
บนทกลงไปใน col เปนไปตามเงอนไขทเรากำาหนดไวหรอไม หากไมเปนไปตามเงอนไขกจะตองฟอง Error ออกมา
รปแบบการกำาหนดคา Constraint แบบ CHECK
โปแกรมอนญาต เนองจาก 60 ทจะเพมเขาไปในตาราง
ไมอนญาตเพราะ 9 ทจะเพมเขาไปในตารางลก ไมมอยใน
CREATE TABLE employees ( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUBMER(2,2), hire_date DATE NOT NULL, .......... department_id NUMBER(4), CONSTRAINT emp_dept_id_fk FOREIGN KEY (department_id) REFERENCES departments (department_id), CONSTRAINT emp_email_uk UNIQUE
การกำาหนดลบคา Constraint เราสามารถลบ constraint หรอ drop constraint ไดดวย
คำาสง SQL ALTER TABLE ตามดวย DROP CONSTRAINT
รปแบบการลบคา Constraint ออกจากตาราง
ตวอยางการลบคา Constraint
…….., salary NUMBER(5)CONSTRAINT emp_salary_minCHECK (salary > 0),…………
ALTER TABLE table_nameDROP [CONSTRAINT|INDEX] CONSTRAINT_NAME;
ALTER TABLE employees DROP CONSTRAINT emp_email_uk;
แบบฝกหดCREATE TABLE Emp (employee_id NUMBER(6) CONSTRAINT Em_emp_id_pk PRIMARY KEY ,first_name VARCHAR2(20) ,last_name VARCHAR2(25) CONSTRAINT Em_last_name_nn NOT NULL ,email VARCHAR2(25) CONSTRAINT Em_email_nn NOT NULL CONSTRAINT Em_email_uk UNIQUE ,phone_number VARCHAR2(20) ,hire_date DATE CONSTRAINT Em_hire_date_nn NOT NULL ,job_id VARCHAR2(10) CONSTRAINT Em_job_id_nn NOT NULL ,salary NUMBER(8,2) CONSTRAINT Em_salary_ck CHECK (salary > 0) ,commission_pct NUMBER(2,2) ,manager_id NUMBER(6) CONSTRAINT Em_mng_id_fk REFERENCES employees (employee_id) ,department_id NUMBER(4) CONSTRAINT Em_dept_id_fk REFERENCES departments (department_id));
การทำาผดกฎของ Constraints
- จะเกด Error เนองจาก 110 ไมมอยทงในตาราง แม และตาราง ลกหากจะแกไข กจะตองไปแกทตารางลกดวยแตตารางลกถกใชงานอย จงไมสามารถแกไขได
UPDATE employeesSET department_id = 55WHERE department_id = 110;
DELETE FROM departmentsWHERE department_id = 60;
- จะเกด Error เนองจากมการเชอมกนอย 2 ตาราง หากจะลบขอมลจากตารางแม ตองลบตารางลกดวย ซงตารางลกถกใชงานอยจงไมสามารถลบได
การสรางตารางโดยอาศย Subquery เขามาชวย- Sub Query จะเรยกดขอมลดวยคำาสง SQL แตมนจะซอน
อยในคำาสงอน ๆ
รปแบบการสรางตารางโดยอาศย Subquery
ตวอยางการสรางตาราง โดยอาศย Subquery
คำาสง DESC ในการเรยกดผลจากการสรางตาราง
CREATE TABLE table_name[(column, column…………)]
AS subquery
CREATE TABLE dept80AS SELECT employee_id,last_name,salary * 12 ANNSAL,hire_date FROM employees WHERE department_id = 80;
DESC dept80;
เปนการสรางตาราง dept80 ขนมาใหม โดยการใช Subquery ในการชวยสราง
คำาสงเปลยนแปลงโครงสรางของตาราง (ALTER TABLE)- ใชในการเพมคลอลมนเขาไปใหม เชน ในตารางม 4 คอลลมน
เพมเขาไปอก 1 คลอลมนเปน 5 คลอลมน- ใชในการแกขอมลในคลอลมนเดม
รปแบบเปลยนแปลงโครงสรางของตาราง (เพมคอลมน)
รปแบบเปลยนแปลงโครงสรางของตาราง (แกไขชอ,ชนดขอมล,ขนาดของขอมล)
คำาสงเปลยนชอตาราง (RENAME TABLE) สามารถทำาไดโดยใชคำาสง RENAME TABLE ..... TO .....
หรอ ALTER TABLE ..... TO ..... การเปลยนแปลงชอขอมล
ALTER ADD col ;
ALTER ADD table_name MODIFY column datatype datasize ;
รปแบบคำาสงในการแกไขคอ
รปแบบคำาสงในการเพมคลอลมนคลอ
อนๆ ภายใน Database ทอางองมาท Table นกจะถกเปลยนแปลงตามไปดวย
รปแบบคำาสง RENAME TABLE
ตวอยางการใชคำาสง RENAME TABLE
คำาสงในการลบขอมลทงตาราง (TRUNCATE)จะทำาการลบขอมลทงตาราง เมอรนคำาสงนจะไมสามารถ
ROLLBACK ได ซง TRUNCATE จะเรวกวาการใชคำาสง DELETE เพราะไมจำาเปนตองมการไปเกบขอมลไวใน undo เพอไวสำาหรบการ ROLLBACK
รปแบบคำาสง TRUNCATE
ตวอยางคำาสง TRUNCATE
RENAME [TABLE] `old-table` TO `new-table`;
CREATE TABLE person( id int(11) PRIMARY, first_name varchar(50), last_name varchar(50));RENAME person TO customer;
รปแบบคำาสงในการเปลยนชอตารางจาก person เปน
TRUNCATE TABLE table_name;
TRUNCATE TABLE emp; ลบขอมลในตาราง emp ทงหมด
คำาสงในการลบตาราง (DROP)จะเปนการลบตารางออกจากฐานขอมล รวมทง index ,
privileges ซงหลงจากรนคำาสงนแลวจะไมสามารถ ROLLBACK กลบมาได
รปแบบคำาสง DROP Table
ตวอยางคำาสง DROP Table
สรปคำาสง DDL ทเกยวของกบตาราง
คำาอธบาย ตวอยางคำาสง
คำาสงทใชในการสรางตาราง CREATE TABLE table_name;
คำาสงในการลบขอมลทงตาราง TRUNCATE TABLE table_name;
DROP TABLE dept80;ตาราง dept80 ถกลบ เรยบรอยแลว
DROP TABLE table_name;
คำาอธบาย ตวอยางคำาสง
คำาสงทใชในการลบตาราง DROP TABLE table_name;
คำาสงทใชในการเปลยนชอตาราง
RENAME table_old_name TO table_new_name;
คำาสงทใชในการเพมคอลมน ในตาราง
ALTER TABLE table_name ADD column_name column_type;
คำาสงทใชในการลบคอลมน ในตาราง
ALTER TABLE table_name DROP column_name;
คำาสงทใชในการเปลยน ชอคอลมน ในตาราง
ALTER TABLE table_name RENAME column_old_name TO column_new_name;
คำาสงทใชในการเปลยน ประเภทขอมลของคอลมน ในตาราง
ALTER TABLE table_name ALTER COLUMN column_name new_column_type