การจัดการฐานข้อมูล
คำสั่งของภาษา
ภาษา SQL (สามารถอ่านออกเสียงได้ 2 แบบ คือ “เอสคิวแอล” (SQL) หรือ “ซีเควล” (Sequel) ย่อมมาจาก Structured Query Language หรือภาษาในการสอบถามข้อมูล เป็นภาษาทางด้านฐานข้อมูล ที่สมารถสร้างและปฏิบัติการกับฐานข้อมูลแบบสัมพันธ์ (Relational Database) โดยเฉพาะ และเป็นภาษาที่มีลักษณะคลายกับภาษาอังกฤษ ภาษา SQL ถูกพัฒนาขึ้นจากแนวคิดของ Relational Calculus และ Relational Algebra เป็นหลัก ภาษา SQL เริ่มพัฒนาครั้งแรกโดย Almaden Research Center ของบริษัท IBM โดยมีชื่อเริ่มแรกว่า “ซีเควล” (Sequel) ต่อมาได้เปลี่ยนชื่อเป็น “เอสคิวแอล” (SQL) หลังจากนั้นภาษาSQL ได้ถูกนำมาพัฒนาโดยผู้ผลิตซอฟต์แวร์ด้านระบบจัดการฐานข้อมูลเชิงสัมพันธ์จนเป็นที่นิยมกันอย่างแพร่หลายในปัจจุบัน โดยผู้ผลิตแต่ละรายก็พยายามที่จะพัฒนาระบบจัดการฐานข้อมูลของตนให้มีลักษณะเด่นเฉพาะขึ้นมา ทำให้รูปแบบการใช้คำสั่ง SQL มีรูปแบบที่แตกต่างกันไปบ้าง เช่น Oracle Access SQL Base ของ Sybase Ingres หรือ SQL Server ของ Microsoft เป็นต้น ดังนั้นในปี ค.ศ. 1986 ทางด้าน American National Standards Institute (ANSI) จึงได้กำหนดมาตรฐานของ SQL ขึ้น อย่างไรก็ดี โปรแกรมฐานข้อมูลที่ขายในท้องตลาด ได้ขยาย SQL ออกไปจนเกินข้อกำหนดของ ANSI โดยเพิ่มคุณสมบัติอื่น ๆ ที่คิดว่าเป็นประโยชน์เข้าไปอีก แต่โดยหลักทั่วไปแล้วก็ยังปฏิบัติตามมาตรฐานของ ANSI ในการอธิบายคำสั่งต่าง ๆ ของภาษาSQL
1. ประเภทของคำสั่งในภาษา SQL
ภาษา SQL เป็นภาษาที่ใช้งานได้ตั้งแต่ระดับเครื่องคอมพิวเตอร์ส่วนบุคคลพีซีไปจนถึงระดับเมนเฟรม ประเภทของคำสั่งในภาษา (SQL The Subdivision of SQL) แบ่งออกเป็น 3 ประเภท คือ
1. ภาษาสำหรับการนิยามข้อมูล(Data Definition Language :DDL) ประกอบด้วยคำสั่งที่ใช้ในการกำหนดโครงสร้างข้อมูลว่ามีคอลัมน์อะไร แต่ละคอลัมน์เก็บข้อมูลประเภทใด รวมถึงการเพิ่มคอลัมน์การกำหนดดัชนี การกำหนดวิวหรือตารางเสมือนของผู้ใช้ เป็นต้น
2. ภาษาสำหรับการจัดการข้อมูล (Data Manipulation Language :DML) ประกอบด้วยคำสั่งที่ใช้ในการเรียกใช้ข้อมูลการเปลี่ยนแปลงข้อมูล การเพิ่มหรือลบข้อมูล เป็นต้น
3. ภาษาควบคุม (Data Control Language : DCL)ประกอบด้วยคำสั่งที่ใช้ในการควบคุมการเกิดภาวะพร้อมกัน หรือการป้องกันการเกิดเหตุการณ์ที่ใช้หลายคนเรียกใช้ข้อมูลพร้อมกัน และคำสั่งที่เกี่ยวข้องกับการควบคุมความปลอดภัยของข้อมูลด้วยการกำหนดสิทธิ์ของผู้ใช้ที่แตกต่าง เป็นต้น
2. ชนิดของข้อมูล (Data Type)
การใช้ชนิดข้อมูลได้อย่างถูกต้องในการสร้างฐานข้อมูลทำให้การจัดสรรการใช้เนื้อที่หน่วยความจำได้อย่างมีประสิทธิภาพ หน่วยความจำนี้รวมถึงฮาร์ดดิสก์ด้วย ดังนั้น เราควรจะทำความรู้จักชนิดข้อมูลที่ใช้ในฐานข้อมูล SQL Server ก็จะมีความคล้ายคลึงกับชนิดข้อมูลของผู้ผลิตรายอื่น ๆ เพราะใช้มาตรฐาน ANSI เป็นต้นแบบในการผลิตแอพพลิเคชันฐานข้อมูล ซึ่งแบ่งเป็นชนิดของข้อมูล ดังนี้
2.1 Character
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Char[(n)] |
1 - 8000 |
n |
Varchar[(n)] |
1 – 8000 |
ความยาวข้อมูล |
Text |
231-1(2,147,483,647) ตัวอักษร |
16+Multiple of 2k |
2.2 Binary
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Binary(n) |
1 - 8000 |
n |
Varbinary(n) |
1 - 8000 |
n + 1 |
Image |
231 -1(2,147,483,647) ไบต์ |
16+Multiple of 2k |
Timestamp |
ใช้สำหรับเปลี่ยนการจัดการ |
16 |
2.3 Date
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Datetime |
วันที่เริ่มต้นตั้งแต่ January 1,1753 ถึง December 31,9999 ความละเอียดถึง 1/1000 วินาที |
8 |
Smalldetetime |
วันที่เริ่มต้นตั้งแต่ January 1,1900 ถึง June 6,2079 |
4 |
2.4 Logical
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Bit |
0 หรือ 1 |
1 |
2.5 Numeric
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Int |
±2,147,483,647 |
4 |
Smallint |
±32767 |
2 |
Tinyint |
0 255 |
1 |
Float(p) |
±1.79E+308 |
4 (Precision<16) |
Double p |
±1.79E+308 |
8 |
Real |
±1.79E+308 |
4 |
Numeric(p,s) |
±103 |
2 ถึง 17 |
Money |
±$922,337,203,685,477.5807 |
8 |
Smallmoney |
±$214,748.3647 |
4 |
3.การจัดการสร้าง เพิ่ม และลดขนาดของดาต้าเบส
การสร้างดาต้าเบสโดย Enterprise Manager
CAPJOR หน้าจอ
CAPJOR หน้าจอ
การสร้างดาต้าเบสโดย Transact-SQL
CREATE DATABASE database_name ON |
ตัวอย่าง สร้างดาต้าเบสชื่อ First DB ให้มีขนาดของดาต้าเบสและ Transaction Log ดังนี้
CREATE DATABASE First DB ON
PRIMARY (NAME = first_data,
FILENAME ‘c : \mssq17\data\first.mdf’ .
SIZE = 8MB,
MAXSIZE = 25 MB,
FILEGROWTH = 20%)
LOG ON
(NAME = first_log,
FILENAME = ‘c : \mssq17\data\first.ldf’,
SIZE = 2 MB,
MAXSIZE = 5 MB,
FILEGROWTH = 2 MB)
การดูรายละเอียดของดาต้าเบสโดย Enterprise Manager
CAPJOR หน้าจอ
Owner คือ ชื่อยูสเซอร์ที่สร้างดาต้าเบส
Date Created คือ วันที่สร้าง
Size คือ ขนาดของดาต้าเบส
Space Available คือ เนื้อที่ที่ยังว่างอยู่
Database Options คือ ออปชั่นของดาต้าเบส
Number of Users คือ จำนวน Database User ของ Pubs
นอกจากนี้ยังบอกรายละเอียดของแบ็คอัพว่าทำเมื่อใด เช่น Database Backup Differential Backup หรือ Transaction Log Backup
CAPJOR หน้าจอ
CAPJOR หน้าจอ
การดูรายละเอียดของดาต้าเบสโดย Transact – SQL และ Stored Procedure
Transact – SQL และ Stored Procedure |
แสดงรายละเอียด |
SELECT*FROM sysdatabases |
แสดงรายชื่อของดาต้าเบสทั้งหมด |
SELECT*FROM sysusers |
แสดงรายชื่อของยูสเซอร์ใน Current Database |
sp_tables |
แสดงรายชื่อเทเบิลใน Current Database |
sp_helpfile |
แสดงรายชื่อไฟล์บนดิสก์ที่ลิงค์ไปยัง Current Database |
sp_dboption databasename |
เรียกดูออปชั่นของดาต้าเบส |
sp_helpdb [database] |
แสดงรายละเอียดของดาต้าเบสทั้งหมดในเซิร์ฟ เวอร์(ถ้าระบุชื่อของดาต้าเบสจะแสดงเฉพาะดาต้าเบสนั้นได้แก่ ชื่อ Database, Size, Owner ฯลฯ |
sp_spaceused [table] |
แสดงเนี้อที่ที่ใช้ของ Current Database หรือถ้าระบุชื่อเทเบิลจะแสดงเนื้อที่การใช้งานของเทเบิล |
การกำหนดออปชั่นให้กับดาต้าเบส
ออปชั่นที่กำหนดให้กับดาต้าเบสมีผลต่อการใช้งานดาต้าเบส ดังเช่นที่เราจะพบอยู่บ่อย ๆ ว่าบางครั้งเราไม่สามารถใช้คำสั่งบางคำสั่งได้เช่น SELECT INTO (เพื่อสร้างเทเบิลใหม่จากเทเบิลเดิม) เป็นเพราะออปชั่นของดาต้าเบสมิได้เซ็ทให้สามารถทำได้ สำหรับรายละเอียดออปชั่นต่าง ๆ จะแบ่งเป็น 2 กลุ่ม คือ Access และ Setting มีดังนี้
การจัดการฐานข้อมูล
คำสั่งของภาษา
ภาษา SQL (สามารถอ่านออกเสียงได้ 2 แบบ คือ “เอสคิวแอล” (SQL) หรือ “ซีเควล” (Sequel) ย่อมมาจาก Structured Query Language หรือภาษาในการสอบถามข้อมูล เป็นภาษาทางด้านฐานข้อมูล ที่สมารถสร้างและปฏิบัติการกับฐานข้อมูลแบบสัมพันธ์ (Relational Database) โดยเฉพาะ และเป็นภาษาที่มีลักษณะคลายกับภาษาอังกฤษ ภาษา SQL ถูกพัฒนาขึ้นจากแนวคิดของ Relational Calculus และ Relational Algebra เป็นหลัก ภาษา SQL เริ่มพัฒนาครั้งแรกโดย Almaden Research Center ของบริษัท IBM โดยมีชื่อเริ่มแรกว่า “ซีเควล” (Sequel) ต่อมาได้เปลี่ยนชื่อเป็น “เอสคิวแอล” (SQL) หลังจากนั้นภาษาSQL ได้ถูกนำมาพัฒนาโดยผู้ผลิตซอฟต์แวร์ด้านระบบจัดการฐานข้อมูลเชิงสัมพันธ์จนเป็นที่นิยมกันอย่างแพร่หลายในปัจจุบัน โดยผู้ผลิตแต่ละรายก็พยายามที่จะพัฒนาระบบจัดการฐานข้อมูลของตนให้มีลักษณะเด่นเฉพาะขึ้นมา ทำให้รูปแบบการใช้คำสั่ง SQL มีรูปแบบที่แตกต่างกันไปบ้าง เช่น Oracle Access SQL Base ของ Sybase Ingres หรือ SQL Server ของ Microsoft เป็นต้น ดังนั้นในปี ค.ศ. 1986 ทางด้าน American National Standards Institute (ANSI) จึงได้กำหนดมาตรฐานของ SQL ขึ้น อย่างไรก็ดี โปรแกรมฐานข้อมูลที่ขายในท้องตลาด ได้ขยาย SQL ออกไปจนเกินข้อกำหนดของ ANSI โดยเพิ่มคุณสมบัติอื่น ๆ ที่คิดว่าเป็นประโยชน์เข้าไปอีก แต่โดยหลักทั่วไปแล้วก็ยังปฏิบัติตามมาตรฐานของ ANSI ในการอธิบายคำสั่งต่าง ๆ ของภาษาSQL
1. ประเภทของคำสั่งในภาษา SQL
ภาษา SQL เป็นภาษาที่ใช้งานได้ตั้งแต่ระดับเครื่องคอมพิวเตอร์ส่วนบุคคลพีซีไปจนถึงระดับเมนเฟรม ประเภทของคำสั่งในภาษา (SQL The Subdivision of SQL) แบ่งออกเป็น 3 ประเภท คือ
1. ภาษาสำหรับการนิยามข้อมูล(Data Definition Language :DDL) ประกอบด้วยคำสั่งที่ใช้ในการกำหนดโครงสร้างข้อมูลว่ามีคอลัมน์อะไร แต่ละคอลัมน์เก็บข้อมูลประเภทใด รวมถึงการเพิ่มคอลัมน์การกำหนดดัชนี การกำหนดวิวหรือตารางเสมือนของผู้ใช้ เป็นต้น
2. ภาษาสำหรับการจัดการข้อมูล (Data Manipulation Language :DML) ประกอบด้วยคำสั่งที่ใช้ในการเรียกใช้ข้อมูลการเปลี่ยนแปลงข้อมูล การเพิ่มหรือลบข้อมูล เป็นต้น
3. ภาษาควบคุม (Data Control Language : DCL)ประกอบด้วยคำสั่งที่ใช้ในการควบคุมการเกิดภาวะพร้อมกัน หรือการป้องกันการเกิดเหตุการณ์ที่ใช้หลายคนเรียกใช้ข้อมูลพร้อมกัน และคำสั่งที่เกี่ยวข้องกับการควบคุมความปลอดภัยของข้อมูลด้วยการกำหนดสิทธิ์ของผู้ใช้ที่แตกต่าง เป็นต้น
2. ชนิดของข้อมูล (Data Type)
การใช้ชนิดข้อมูลได้อย่างถูกต้องในการสร้างฐานข้อมูลทำให้การจัดสรรการใช้เนื้อที่หน่วยความจำได้อย่างมีประสิทธิภาพ หน่วยความจำนี้รวมถึงฮาร์ดดิสก์ด้วย ดังนั้น เราควรจะทำความรู้จักชนิดข้อมูลที่ใช้ในฐานข้อมูล SQL Server ก็จะมีความคล้ายคลึงกับชนิดข้อมูลของผู้ผลิตรายอื่น ๆ เพราะใช้มาตรฐาน ANSI เป็นต้นแบบในการผลิตแอพพลิเคชันฐานข้อมูล ซึ่งแบ่งเป็นชนิดของข้อมูล ดังนี้
2.1 Character
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Char[(n)] |
1 - 8000 |
n |
Varchar[(n)] |
1 – 8000 |
ความยาวข้อมูล |
Text |
231-1(2,147,483,647) ตัวอักษร |
16+Multiple of 2k |
2.2 Binary
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Binary(n) |
1 - 8000 |
n |
Varbinary(n) |
1 - 8000 |
n + 1 |
Image |
231 -1(2,147,483,647) ไบต์ |
16+Multiple of 2k |
Timestamp |
ใช้สำหรับเปลี่ยนการจัดการ |
16 |
2.3 Date
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Datetime |
วันที่เริ่มต้นตั้งแต่ January 1,1753 ถึง December 31,9999 ความละเอียดถึง 1/1000 วินาที |
8 |
Smalldetetime |
วันที่เริ่มต้นตั้งแต่ January 1,1900 ถึง June 6,2079 |
4 |
2.4 Logical
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Bit |
0 หรือ 1 |
1 |
2.5 Numeric
ชนิดข้อมูล |
ขอบเขตของชนิดข้อมูล |
ขนาดหน่วยความจำ (ไบต์) |
Int |
±2,147,483,647 |
4 |
Smallint |
±32767 |
2 |
Tinyint |
0 255 |
1 |
Float(p) |
±1.79E+308 |
4 (Precision<16) |
Double p |
±1.79E+308 |
8 |
Real |
±1.79E+308 |
4 |
Numeric(p,s) |
±103 |
2 ถึง 17 |
Money |
±$922,337,203,685,477.5807 |
8 |
Smallmoney |
±$214,748.3647 |
4 |
3.การจัดการสร้าง เพิ่ม และลดขนาดของดาต้าเบส
การสร้างดาต้าเบสโดย Enterprise Manager
CAPJOR หน้าจอ
CAPJOR หน้าจอ
การสร้างดาต้าเบสโดย Transact-SQL
CREATE DATABASE database_name ON |
ตัวอย่าง สร้างดาต้าเบสชื่อ First DB ให้มีขนาดของดาต้าเบสและ Transaction Log ดังนี้
CREATE DATABASE First DB ON
PRIMARY (NAME = first_data,
FILENAME ‘c : \mssq17\data\first.mdf’ .
SIZE = 8MB,
MAXSIZE = 25 MB,
FILEGROWTH = 20%)
LOG ON
(NAME = first_log,
FILENAME = ‘c : \mssq17\data\first.ldf’,
SIZE = 2 MB,
MAXSIZE = 5 MB,
FILEGROWTH = 2 MB)
การดูรายละเอียดของดาต้าเบสโดย Enterprise Manager
CAPJOR หน้าจอ
Owner คือ ชื่อยูสเซอร์ที่สร้างดาต้าเบส
Date Created คือ วันที่สร้าง
Size คือ ขนาดของดาต้าเบส
Space Available คือ เนื้อที่ที่ยังว่างอยู่
Database Options คือ ออปชั่นของดาต้าเบส
Number of Users คือ จำนวน Database User ของ Pubs
นอกจากนี้ยังบอกรายละเอียดของแบ็คอัพว่าทำเมื่อใด เช่น Database Backup Differential Backup หรือ Transaction Log Backup
CAPJOR หน้าจอ
CAPJOR หน้าจอ
การดูรายละเอียดของดาต้าเบสโดย Transact – SQL และ Stored Procedure
Transact – SQL และ Stored Procedure |
แสดงรายละเอียด |
SELECT*FROM sysdatabases |
แสดงรายชื่อของดาต้าเบสทั้งหมด |
SELECT*FROM sysusers |
แสดงรายชื่อของยูสเซอร์ใน Current Database |
sp_tables |
แสดงรายชื่อเทเบิลใน Current Database |
sp_helpfile |
แสดงรายชื่อไฟล์บนดิสก์ที่ลิงค์ไปยัง Current Database |
sp_dboption databasename |
เรียกดูออปชั่นของดาต้าเบส |
sp_helpdb [database] |
แสดงรายละเอียดของดาต้าเบสทั้งหมดในเซิร์ฟ เวอร์(ถ้าระบุชื่อของดาต้าเบสจะแสดงเฉพาะดาต้าเบสนั้นได้แก่ ชื่อ Database, Size, Owner ฯลฯ |
sp_spaceused [table] |
แสดงเนี้อที่ที่ใช้ของ Current Database หรือถ้าระบุชื่อเทเบิลจะแสดงเนื้อที่การใช้งานของเทเบิล |
การกำหนดออปชั่นให้กับดาต้าเบส
ออปชั่นที่กำหนดให้กับดาต้าเบสมีผลต่อการใช้งานดาต้าเบส ดังเช่นที่เราจะพบอยู่บ่อย ๆ ว่าบางครั้งเราไม่สามารถใช้คำสั่งบางคำสั่งได้เช่น SELECT INTO (เพื่อสร้างเทเบิลใหม่จากเทเบิลเดิม) เป็นเพราะออปชั่นของดาต้าเบสมิได้เซ็ทให้สามารถทำได้ สำหรับรายละเอียดออปชั่นต่าง ๆ จะแบ่งเป็น 2 กลุ่ม คือ Access และ Setting มีดังนี้
ออปชั่นของ Access |
ความหมาย |
DBP Use Only |
กำหนดให้ดาต้าเบสใช้ได้เฉพาะผู้ที่เป็นสมาชิกของ Fixed Database Role หรือ DB_Owner เท่านั้น ถ้าขณะนั้นยังคงมียูสเซอร์ใช้งานค้างอยู่เขายังสามารถทำงานได้ แต่เมื่อใดที่ยูสเซอร์นั้นเลิกการติดต่อหรือเปลี่ยนไปใช้ ดาต้าเบสอื่นก็จะกลับเข้ามาใช้อีกไม่ได้ จนกว่าจะกำหนดออปชั่นนี้ใหม่ให้เป็น False ส่วนใหญ่มักจะใช้เมื่อทำ Maintenance ระบบและไม่อนุญาตให้ยูสเซอร์อื่น ๆ เข้ามาใช้งานขณะนั้น |
Single User |
จำกัดการใช้งาน SQL Server ได้ครั้งละ 1 คนเท่านั้น มักจะใช้ตอนกู้ดาต้าเบส Master หรือเปลี่ยนชื่อดาต้าเบส |
Read Only |
กำหนดให้สามารถอ่านข้อมูลจาก SQL Server ได้เท่านั้น ไม่สามารถเพิ่ม แก้ไขหรือลบข้อมูลในดาต้าเบสได้ |
ANSI NULL Default |
ปกติ SQL Server จะให้ดีฟอลต์ทุกคอลัมน์เป็น NOT NULL แต่ถ้ากำหนดออปชั่นนี้ให้เป็น True ค่าดีฟอลต์จะกลายเป็น NULL |
Recusive Triggers |
ถ้ากำหนดให้เป็น True จะทำให้การอ้างอิงของทริกเกอร์ที่กระทำกับเทเบิลที่หนึ่งไปยังเทเบิลที่สอง และในเทเบิลที่สองสามารถสร้างทริกเกอร์ให้กระทำย้อนกลับมาที่เทเบิลที่หนึ่งได้ |
Select Into/Bulk Copy |
ยอมทำบางคำสั่งโดยไม่บันทึกลง Transaction Log เช่นSelect Intoและ BCP |
Torn Page Detection |
เมื่อกำหนดให้เป็น True ระบบจะตรวจสอบแต่ละเพจว่าบันทึกลงดิสก์ถูกต้องสมบูรณ์หรือไม่ ทั้งนี้เพราะขณะที่บันทึกเพจนั้นอาจเกิดไฟดับ หรือระบบล่ม จะทำให้การบันทึกของเพจนั้นไม่สมบูรณ์ ในกรณีที่เซ็ทเป็น True จะทำให้ไม่สามารถรีสโตร์ดาต้าเบสได้ถ้ามีเพจเสียเกิดขึ้น |
Auto Close |
ถ้ากำหนดให้เป็น True ระบบดาต้าเบสจะปิดดาต้าเบสถ้าไม่มีคนใช้งาน และถ้ามีคนขอเข้ามาใช้ดาต้าเบสอีก ระบบก็จะเปิดให้ใช้โดยอัตโนมัติ ค่าดีฟอลต์จะกำหนดให้เป็น True เมื่อใช้ SQL Server ที่เป็นรุ่น Desktop Edition ส่วนรุ่นอื่น ๆ จะกำหนดให้เป็น Fault เพื่อจัดการไฟล์ดาต้าเบสได้ในแบบเดียวกันกับไฟล์ทั่ว ๆ ไป เช่น ก็อปปี้ แต่วิธีการนี้ไม่เหมาะกับงานที่มีทรานแซคชั่นมาก ๆ |
Auto Shrink |
เมื่อกำหนดให้เป็น True ระบบจะตรวจสอบดาต้าเบส และ Transaction Log ถ้าพบว่ามีเนี้อที่ว่างมากกว่า 25 เปอร์เซ็นต์ จะทำการลดขนาดของดาต้าเบสโดยอัตโนมัติ สำหรับการลดขนาดของ Transaction Log จะไม่ทำทันที แต่ทำเมื่อมีการแบ็คอัพหรือลบคำสั่งที่มีใน Transaction Log ออกแล้ว แต่การลดขนาดไม่สามารถจะลดให้เล็กกว่าขนาดของไฟล์ที่สร้างไว้ |
Auto Create Statistics |
เมื่อกำหนดให้เป็น True ระบบจะจัดทำตัวเลขสถิติให้กับคอลัมน์ของเทเบิลที่มีคิวรีโดยใช้ WHERE clause เพื่อใช้ปรับประสิทธิภาพการดึงข้อมูลให้เร็วขึ้น |
Auto Update Statistics |
ถ้ากำหนดให้เป็น True ค่าสถิติของคอลัมน์จะถูกเปลี่ยนแปลงโดยอัตโนมัติเมื่อข้อมูลในคอลัมน์เปลี่ยน |
Use Quoted Identifiers |
ถ้ากำหนดให้เป็น True จะต้องใส่ “ ” เมื่อต้องการอ้างชื่อออปเจ็กต์ ต่าง ๆ ในดาต้าเบส |
การกำหนดออปชั่นให้กับดาต้าเบสด้วย Enterprise Manager
CAPJOR หน้าจอ
การกำหนดออปชั่นให้กับดาต้าเบสด้วย Transact – SQL
Sp_dboption [[@dbname = ] ‘database’] |
ตัวอย่าง กำหนดให้ Pubs มีพร็อพเพอร์ตี้ ‘Select Into/Bulkcopy’ เป็น True
sp_dboption ‘pubs’ , ‘select into/bulkcopy’ , ‘true’
การเพิ่มขนาดดาต้าเบสโดย Exterprise Manager
เมื่อใช้ดาต้าเบสไประยะ ถ้าพบว่าขนาดของดาต้าเบสเล็กเกินไปก็ขยายเพิ่มเติมได้ โดยทำดังนี้
CAPJOR หน้าจอ
การเพิ่มขนาดดาต้าเบสโดย Transact – SQL
ALTER DATABASE database_name |
ตัวอย่าง ขยายขนาดเนื้อที่ของดาต้าเบสชื่อ First DB ให้เป็น 40 เมกกะไบต์
ALTER DATABASE First DB
MODIFY FILE (NAME = ‘first_data’,
SIZE = 40 MB)
ตัวอย่าง เพิ่มไฟล์ให้ดับดาต้าเบสชื่อ First DB อีก 1 ไฟล์ มีขนาดเริ่มต้น 5 MB และ
ขนาดสูงสุด 20 MB
ALTER DATABASE First DB
MODIFY FILE (NAME = ‘first_data’,
FILENAME = ‘c’ :
\mssp17\data\first_data3_data.ndf’,
SIZE = 5 MB,
MAXSIZE = 20 MB)
การเพิ่มขนาดของ Transaction Log โดย Enterprise Manager
3. คลิก OK
การเพิ่มขนาดของ Transaction Log โดย Transact – SQL
ตัวอย่าง ให้ขยายขนาดเนื้อที่ Transaction Log ของ Pubs ให้เป็น 6 เมกกะไบต์
ALTER DATABASE Pubs
MODIFY FILE (NAME = ‘pubs_Log’,
SIZE = 6 MB)
ตัวอย่าง ให้ขยายขนาดเนื้อที่ Transaction Log ของ Pubs โดยการเพิ่มไฟล์ขนาด 2 เมกกะไบต์ และเมื่อเต็มก็ขยายได้อีกแต่ใหญ่ไม่เกิน 5 เมกกะไบต์
ALTER DATABASE pubs
ADD LOG FILE (NAME = ‘pubs_log2’,
FILENAME = ‘c : \mssspl7\data\pubs_log2’.ldf’,
SIZE = 2 MB,
MAXSIZE = 5 MB)
การลดขนาดของดาต้าเบสโดย Enterprise Manager
การลดขนาดของดาต้าเบสจะทำการลบพื้นที่หรือเพจว่าง ๆ ที่อยู่ในดาต้าเบสนั้น ซึ่งลดขนาดได้ทั้งส่วนที่เก็บข้อมูล และส่วนที่เป็น Transaction Log โดยมีวิธีการดังนี้
การลดขนาดของดาต้าเบสโดย Transact – SQL
การปรับลดขนาดของดาต้าเบส เพื่อลดขนาดของพื้นที่ของทุกไฟล์ในส่วนที่ยังไม่ได้ใช้คำสั่งนี้จะทำได้กับดาต้าเบสเท่านั้น และมีข้อจำกัดว่าค่าที่ปรับลดนี้จะเล็กกว่าดาต้าเบส Model หรือเล็กกว่าขนาดเริ่มต้นที่สร้างไว้ไม่ได้
DBCC SHRINKDATABASE |
database_name คือ ชื่อของดาต้าเบสที่ต้องการลดขนาด
target_percent คือ ขนาดของเนื้อที่ว่างเป็นเปอร์เซ็นต์ที่จะให้คงเหลืออยู่หลังจากลดขนาดดาต้าเบสแล้ว ถ้าไม่ระบุจะลดขนาดให้เท่าที่สามารถจะทำได้
NOTRUNCATE คือ ย้ายเพจข้อมูลที่อยู่ท้ายไฟล์ไปยังเพจที่อยู่ต้น ๆ ส่วนเพจท้าย ๆ ที่ว่างอยู่นั้นให้คงไว้ ทำให้ขนาดไฟล์เท่าเดิม
TRUNCATEONLY คือ พื้นที่ว่างที่ไม่ได้ใช้ให้กับระบบปฏิบัติการ โดยไม่มีการขยับเพจของข้อมูล เมื่อใช้ออปชั่นนี้ไม่ต้องระบุ targer_percent
ตัวอย่าง ให้ลดขนาดดาต้าเบส Pubs โดยให้เลือกเนื้อที่ว่างประมาณ 10 %
DBCC SHRINKDATABASE(Pubs, 10)
การลดขนาดไฟล์ของดาต้าเบส (DBCC SHRINK FILE)
การปรับลดขนาดของไฟล์ข้อมูลหรือไฟล์ Transaction Log ของดาต้าเบส เพื่อลดขนาดของพื้นที่ว่างโดยระบุขนาดสุดท้ายของไฟล์ไว้ เช่น ถ้าไฟล์มีขนาด 10 MB ต้องการลดขนาดโดยให้ target_size เป็น 8 MB ระบบจะทำการย้ายข้อมูลในส่วนของ 2 MB ที่จะต้องถูกตัดออกไปให้ขยับมาอยู่ในส่วนของ 8 MB ให้ได้ แต่อย่างไรก็ตามจะไม่สามารถปรับลดขนาดให้เล็กกว่าขนาดเนื้อที่ที่จริงได้
DBCC SHRINKFILE |
target_size คือ ขนาดของไฟล์เป็นเมกกะไบต์ที่เหลือหลังจากลดขนาดไฟล์แล้ว
EMPTYFILE คือ เป็นเพียงการย้ายข้อมูลในไฟล์ไปยังไฟล์อื่น ๆ ที่อยู่ในกรุ๊ปเดียวกัน และไม่อนุญาตให้บันทึกข้อมูลลงในไฟล์เดิมได้ และถ้าต้องการจะลบไฟล์นี้ทิ้งไห้ใช้คำสั่ง Aletr Database ที่มีออปชั่น Remove File
ALTER DATABASE databasename |
ตัวอย่าง ให้ลดขนาดไฟล์ในส่วนที่เป็น Transaction Log ของด้าต้าเบส Pubs โดยให้เหลือเนื้อที่เพียง 10 เมกกะไบต์
DBCC SHRINKFILE (Pubs_Log, 10)
การลบดาต้าเบสโดย (Enterprise Manager)
การลบดาต้าเบสโดย Transact – SQL
DROP DATABASE database_name [,…] |
ตัวอย่าง ลบ Database ชื่อ Pubs
DROP DATABASE Pubs
4.การจัดการเทเบิล
เทเบิลนั้นถือได้ว่าเป็นออปเจ็กต์ประเภทหนึ่งของดาต้าเบส ซึ่งใช้เก็บข้อมูลต่าง ๆ ไว้โดยมีโครงสร้างเหมือนตาราง 2 มิติ คือ ถ้ามองในแนวนอน คือแถวข้อมูล (Row) และถ้ามองในแนวตั้ง คือ คอลัมน์ของข้อมูล (column) ก่อนการสร้างเทเบิลจะต้องกำหนดรายละเอียดของเทเบิลได้ก่อน
หลักเกณฑ์การสร้างเทเบิล
ในการสร้างเทเบิลนั้นมีหลักเกณฑ์คร่าว ๆ ดังนี้ คือ
การสร้างเทเบิลโดย Enterprise Manager
ตัวอย่าง ให้สร้างเทเบิล Book โดยมีโครงสร้างดังนี้
Column Name |
Description |
Data Type |
Index/NULL |
ID_book |
รหัสหนังสือ |
CHAR(5) |
PK/NOT NULL |
ISBN |
รหัส ISBN |
CHAR(15) |
NOT NULL |
Book_title |
ชื่อหนังสือ |
VARCHAR(50) |
NOT NULL |
Book_auther |
ชื่อผู้แต่ง |
VARCHAR(50) |
(NULL) |
Book_price |
ราคาหนังสือ |
INT |
NOT NULL |
Book_intostock |
จำนวนหนังสือในสต็อค |
INT |
NOT NULL |
Book_note |
หมายเหตุ |
VARCHAR(100) |
(NULL) |
ID_type |
รหัสประเภทหนังสือ |
CHAR(2) |
FK/NOT NULL |
ชื่อ |
ความหมาย |
Column Name |
ชื่อของคอลัมน์ |
Data Type |
ชนิดของข้อมูล |
Length |
ปกติเมื่อล็อค Data Type แล้ว ความยาวของข้อมูลจะถูกกำหนดตามค่าดีฟอลต์ ยกเว้นชนิดข้อมูลบางอย่างที่สามารถกำหนดความยาวเองได้ด้วย ได้แก่ Char, Nchar, Varbinary, varchar และ Nvarchar ส่วนชนิดข้อมูลที่เป็นตัวเลข เช่น Float, Numeric ความยาวจะแปรไปตามขนาดของ Precision |
Precision |
จำนวนหลักของข้อมูลที่มีชนิดข้อมูลเป็นตัวเลข ปกติจะมีค่าตามดีฟอลต์ ยกเว้น Data Type ที่เป็น Decimal และ Numeric ที่กำหนดจำนวนหลักเองได้ (รวมตัวเลขหลังทศนิยม) |
Scale |
จำนวนหลักหลังจุดทศนิยม ปกติจะถูกกำหนดให้เป็น 0 ยกเว้นชนิดข้อมูลที่เป็น Decimal หรือ Numeric ที่กำหนดจำนวนหลักหลังจุดทศนิยมได้ |
Allow Null |
ถ้าเลือก .....หมายถึงมีค่าเป็น Null ได้ โดยค่า Null มักใช้เป็นค่าดีฟอลต์เมื่อไม่มีการป้อนข้อมูลเข้ามาในคอลัมน์นี้ ค่านี้ไม่ใช่ค่า 0 หรือ Blank สิ่งที่ควรระวัง คือ ในคอลัมน์ที่เป็น Primary Key ไม่สามารถกำหนดให้มีค่า Null ได้ เพราะจะมีปัญหาในการคิวรีและอัพเดทข้อมูล |
Default Value |
กำหนดให้ใส่ค่าดีฟอลต์นี้กับคอลัมน์โดยอัตโนมัติเมื่อมีการสร้างแถวใหม่ ซึ่งถ้าผู้ใช้ไม่ป้อนข้อมูลใด ๆ เข้ามา ข้อมูลในคอลัมน์นี้จะมีค่าเป็นดีฟอลต์ไป |
Identity |
ค่าเริ่มต้นของ Identity |
Identiry Seed |
ค่าที่จะให้เพิ่มขึ้นในแต่ละลำดับ |
Is Row Guid |
เก็บค่า Row Global Unique Id สำหรับบอกความเป็นเอกลักษณ์ของแถวข้อมูล คือการแยกให้ออกว่าแต่ละแถวของข้อมูลแตกต่างกันด้วยการใช้ค่าของ Row Guid |
การสร้างเทเบิลโดย Transact – SQL
CREATE TABLE table_name |
Default ข้อมูลในคอลัมน์จะมีค่าดีฟอลต์ตามที่ระบุไว้ที่ Constant_Expression ถ้า Insert ข้อมูลแล้วไม่ใส่ค่าให้กับคอลัมน์นี้ ซึ่งค่าดีฟอลต์ที่กำหนดไว้นี้จะต้องมีชนิดข้อมูลตรงกับชนิดข้อมูลตรงกับชนิดข้อมูลของคอลัมน์นั้นด้วยจึงจะเก็บได้ เช่น การกำหนด Default เป็นเท็กซ์สำหรับคอลัมน์ที่มีชนิดข้อมูลที่เก็บตัวอักษร การกำหนด Default เป็นฟังก์ชันของวันที่ Getdate ( ) สำหรับคอลัมน์ที่มีชนิดข้อมูลเป็นวันที่ เป็นต้น
ตัวอย่าง สร้างเทเบิลชื่อ Book ดังนี้
USE Northwind
CREATE TABLE Book
(ID_book char (5) NOT NULL,
ISBN char (15) ,
Book_title varchar (50) ,
Book_auther varchar (50) ,
Book_price int ,
Book_intostock int ,
Book_note varchar (100) ,
ID_type char (2) NOT NULL)
ตัวอย่าง ให้สร้างเทเบิลประเภทหนังสือ โดยมีโครงสร้างดังนี้
Column Name |
Description |
Data Type |
Index/NULL |
ID_type |
รหัสประเภทหนังสือ |
CHAR (2) |
PK/NOT NULL |
Type_name |
ชื่อประเภทหนังสือ |
VARCHAR (50) |
NOT NULL |
USE Northwind
CREATE TABLE Type
(ID_type char(2) NOT NULL
Type_name varchar (50))
การสร้างเทเบิลแบบมี Identity
ในกรณีที่ต้องการให้คอลัมน์เก็บข้อมูลเป็นตัวเลขลำดับ ซึ่ง SQL Server จะใส่ข้อมูลให้เองโดยอัตโนมัติเมื่อมีการเพิ่มแถวใหม่ในเทเบิล เช่น 1, 2, 3, ... ไปเรื่อย ๆ หรือเรียงลำดับเป็นช่วง ๆ ละเท่า ๆ กัน เช่น 1, 5, 10, .... จะทำให้ได้โดย การกำหนดให้คอลัมน์นั้น เป็น Identity
เราสามารถกำหนดค่า Identity ให้กับคอลัมน์ที่มีชนิดข้อมูลเป็นตัวเลขเท่านั้น (ได้แก่ Int, Smallint, Tinyint, Numeric และ Decimal) และหนึ่งเทเบิลจะมีได้เพียงหนึ่งคอมลัมน์เท่านั้นที่เป็น Identity จากรูปแบบคำสั่ง Seed คือ ค่าตั้งต้น Increment คือ ค่าที่เพิ่มขึ้นในแต่ละลำดับ ถ้าไม่ระบุ Seed และ Increment จะมีค่าดีฟอลต์เป็น 1 และ 1 ตามลำดับ
ตัวอย่าง ให้สร้างเทเบิลลูกค้า โดยมีโครงสร้างดังนี้
Column Name |
Description |
Data Type |
Index/NULL |
ID_cust |
รหัสลูกค้า |
INT |
PK/NOT NULL |
Cust_name |
ชื่อลูกค้า |
CHAR(20) |
NOT NULL |
Cust_num |
บ้านเลขที่ |
CHAR(5) |
NOT NULL |
Cust_road |
ถนน |
VARCHAR(30) |
NOT NULL |
Cust_locality |
ตำบล |
VARCHAR(30) |
NOT NULL |
Cust_amphut |
อำเภอ |
VARCHAR(30) |
NOT NULL |
Cust_province |
จังหวัด |
VARCHAR(20) |
NOT NULL |
Cust_post |
รหัสไปรษณีย์ |
CHAR(5) |
NOT NULL |
Cust_tel |
โทรศัพท์ |
CHAR(15) |
NOT NULL |
USE Northwind
CREATE TABLE Customer
(ID_cust int IDENTITY (1,1) NOT NULL,
Cust_name char(20),
Cust_num char(5),
Cust_road char(20), varchar(30),
Cust_locality varchar(30),
Cust_amphut varchar(30),
Cust_province varchar(20),
Cust_post char(5),
Cust_tel char(15)),
การสร้างเทเบิลแบบมี Default
USE Northwind
CREATE TABLE Customer
(ID_cust int IDENTITY (1,1) NOT NULL,
Cust_name char(30),
Cust_num char(5),
Cust_road char(20), varchar(30),
Cust_locality varchar(30),
Cust_amphut varchar(30),
Cust_province varchar(20), DEFAULT ‘Bangkok’
Cust_post char(5),
Cust_tel char(15)),
จากตัวอย่าง ถ้ามีการเพิ่มแถวข้อมูลเข้าไปที่เทเบิลนี้โดยไม่ระบุค่าให้กับคอลัมน์ Cust_province จะให้ค่าที่เก็บในเทเบิลเป็นคำว่า Bangkok
การเพิ่มคอลัมน์ในเทเบิลโดย Enterprise Manager
การเพิ่มคอลัมน์ในเทเบิลโดย Transaction – SQL
ALTER TABLE table_name |
ตัวอย่าง เพิ่มคอลัมน์ในเทเบิล Customer ดังนี้
USE Nothwind
ALTER TABLE Customer
ADD Sex char
DEFAULT ‘M’
GO
ALTER TABLE Customer
ADD Birth_date datetime
GO
การลบคอลัมน์ในเทเบิลโดย Enterprise Manager
ขณะลบคอลัมน์สิ่งที่ควรระวัง คือ เมื่อสั่งลบและบันทึกจะไม่มีการถามยืนยันการลบอีกครั้ง ซึ่งหาดเกิดเปลี่ยนใจ ไม่ต้องการลบคอลัมน์นั้น ให้คลิก Close ที่มุมขวาด้านบนเพื่อปิดหน้าจอเลย จากนั้นโปรแกรมจะถามว่าต้องการบันทึกหรือไม่ ให้ตอบ No
การลบคอลัมน์ในเทเบิลโดย Enterprise Manager
ขณะลบคอลัมน์สิ่งที่ควรระวัง คือ เมื่อสั่งลบและบันทึกจะไม่มีการถามยืนยันการลบอีกครั้ง ซึ่งหากเกิดเปลี่ยนใจไม่ต้องการลบคอลัมน์นั้น ให้คลิก Close ที่มุมขวาด้านบนเพื่อปิดหน้าจอเลย จากนั้นโปรแกรมจะถามว่าต้องการบันทึกหรือไม่ ให้ตอบ No
CAPJOR หน้าจอ
การลบคอลัมน์ในเทเบิลโดย Transaction – SQL
ALTER TABLE table_name |
ตัวอย่าง ลบคอลัมน์ Birth_date ในเทเบิล Customer
USE Northwind
ALTER TABLE Customer
DROP COLUMN Birth_date
GO
การแก้ไขขนาดคอลัมน์ หรือชนิดของข้อมูลโดย Enterprise Manager
CAPJOR หน้าจอ
การแก้ไขขนาดคอลัมน์ หรือชนิดของข้อมูลโดย Transaction – SQL
ALTER TABLE table_name |
การแก้ไขคอลัมน์อาจจะเป็นการแก้ไขความยาวของคอลัมน์ หรือเปลี่ยนชนิดของข้อมูลแต่ทั้งนี้ถ้ามีเทเบิลข้อมูลอยู่แล้ว ต้องพิจารณาไม่ให้ชนิดข้อมูลใหม่กระทบกับข้อมูลที่มีอยู่เดิม
ตัวอย่าง แก้ไขเทเบิล Customer โดยเปลี่ยนขนาดคอลัมน์ Cust_name จาก vachar (30) เป็น vachar (50)
USE Nothwind
ALTER TABLE Customer
ALTER COLUMN Cust_name vachar (50)
การแก้ไขชื่อคอลัมน์โดย Enterprise Manager
การแก้ไขชื่อคอลัมน์โดย Transation – SQL
sp_rename ‘table.original_column_name’ , ‘new_column_name’ , ‘COLUMN’ |
ตัวอย่าง แก้ไขชื่อคอลัมน์ Book_intostock ในเทเบิล Book เป็น Book_stock
Sp_rename ‘Book.Book_intostock’ , ‘Book_stock’ , ‘COLUMN’
คอนสเตรนท์ (Constraint)
คอนสเตรนท์เป็นวิธีหนึ่งที่ช่วยตรวจเช็คความถูกต้องของข้อมูลให้อัตโนมัติ ทำให้สะดวกในการที่ไม่ต้องพัฒนาโปรแกรม เพื่อตรวจสอบความถูกต้องหรือความสอดคล้องกันของข้อมูลเมื่อมีการอ้างข้อมูลเมื่อมีการอ้างข้อมูลระหว่างเทเบิล นอกจากนี้ยังช่วยในการสร้างคีย์กำหนดความเป็นเอกลักษณ์หรือความไม่ซ้ำกันของคอลัมน์เทเบิลได้ สำหรับประเภทของคอนสเตรนท์แบ่งออกได้เป็น
CREATE TABLE Type
(ID_type int PRIMARY KEY,
Type_name varchar(50) ,
CONSTRAINT Chk_type CHECK (ID_type BETWEEN 1 and 99))
สำหรับคอนสเตรนท์ต่าง ๆ นี้สามารถนำไปใช้ควบคุมในระดับคอลัมน์และเทเบิล
ตัวอย่าง เทเบิล Login มีรายละเอียดดังนี้
Column Name |
Description |
DataType |
Index / NULL |
Username |
ชื่อผู้ใช้งาน |
CHAR(10) |
PK / NOT NULL |
Password |
รหัสของผู้ใช้งาน |
CHAR(15) |
PK / NOT NULL |
Question |
คำถาม |
VARCHAR(20) |
NOT NULL |
Answer |
คำตอบ |
VARCHAR(20) |
NOT NULL |
CREATE TABLE Login
(Username char(10),
Password char(15),
Question varchar(20),
Answer varchar(20),
CONSTRAINT Login_key PRIMARY KEY (Username, Password))
การสร้าง Primary Key โดย Enterprise Manager
ในการจัดการคอนสเตรนท์ Primary Key นี้มีหลักเกณฑ์คร่าว ๆ ดังนี้
เมื่อมีการเพิ่ม Primary Key ในเทเบิลที่มีข้อมูลอยู่แล้ว SQL Server จะทำการตรวจสอบว่าข้อมูลในคอลัมน์หรือกลุ่มของคอลัมน์ที่เป็น Primary Key ว่ามีค่าเป็น NULL หรือมีข้อมูลซ้ำกันกับแถวอื่น ๆ หรือไม่ ซึ่งถ้ามีข้อมูลที่เกิดในลักษณะข้างต้น SQL Server จะส่งค่าที่แสดงความผิดพลาดกลับไป และไม่สร้างคอนสเตรนท์นั้นให้
ตัวอย่าง สร้าง Primary Key ให้กับคอลัมน์ ID_book ในเทเบิล book
CAPJOR หน้าจอ
การลบ Primary Key โดย Enterprise Manager
CAPJOR หน้าจอ
การสร้าง Foreign Key โดย Enterprise Manager
Foreign Key เป็นคอลัมน์หรือกลุ่มของคอลัมน์ที่ใช้ในการเชื่อมข้อมูลที่อยู่ใน 2 เทเบิลสำหรับคอลัมน์ที่จะเชื่อมกันในเทเบิล จะต้องมีขนาดเท่ากันและเป็นข้อมูลประเภทเดียวกัน ยกเว้นบางกรณี คือ
วิธีการสร้างต้องใช้ Database Diagram โดยจะเลือกให้ Type เป็นเทเบิลหลัก และ Book เป็นเทเบิลที่จะสร้าง Foreign Key ไปยัง Type
CAPJOR หน้าจอ
CAPJOR หน้าจอ
CAPJOR หน้าจอ
CAPJOR หน้าจอ
การลบ Foreign Key โดย Enterprise Manager
CAPJOR หน้าจอ
การสร้าง Primary Key และ Foreign Key โดย Transaction – SQL
แบบที่ 1
CREATE TABLE table_name (column_name data_type NO NULL [CONSTRAINT constraint_name] {PRIMARY KEY [CLUSTERED | NON CLUSTERED] | REFERENCES ref_table (ref_column)} [,…..n]) |
ตัวอย่าง สร้างเทเบิลชื่อ Product_Item พร้อมทั้งกำหนดให้ Item_id เป็น Primary Key
USE pubs
GO
CREATE TABLE Product_Item
(Item_id smallint NOT NULL CONSTRAINT pk_item_id PRIMARY KEY,
Item_name varchar(20)
Price money)
ตัวอย่าง สร้างเทเบิลชื่อ order_details ให้มี order_id เป็น Primary Key และ Item_id เป็น Forein Key ที่เชื่อมไปยังเทเบิล product_item
USE pubs
GO
CREATE TABLE Order_Details
(Order_id smallint NOT NULL IDENTITY (1,1)
CONSTRAINT pk_order_id PRIMARY KEY ,
Item_id smallint NOT NULL ,
CONSTRAINT item_id_ref REFERENCES Product_Item(Item_id) )
แบบที่ 2
CREATE TABLE table_name (column_name data_type [NULL | NO NULL] [ , …..]) [ , { CONSTRAINT constraint_name PRIMARY KEY (column_name) ] | CONSTRAINT constraint_name FOREIGN KEY (column_name)] | REFERENCES ref_table (ref_column) } ) |
ตัวอย่าง สร้างเทเบิลชื่อ Product_Item พร้อมทั้งกำหนดให้ Item_id เป็น Primary Key
USE pubs
GO
CREATE TABLE Product_Item
(Item_id smallint NOT NULL,
Item_name varchar (20)
Price money,
CONSTRAINT pk_item_id PRIMARY KEY (Item_id))
ตัวอย่าง สร้างเทเบิลชื่อ order_details ให้มี order_id เป็น Primary Key และ Item_id เป็น Foreign Key ที่เชื่อมไปยังเทเบิล Product_item
USE pubs
GO
CREATE TABLE Order_Ketails
(Order_id smallint NOT NULL IDENTITY (1,1) ,
Item_id smallint NOT NULL ,
CONSTRAINT pk_order_id PRIMARY KEY (Order_id) ,
CONSTRAINT item_id_ref FOREIGN KEY (Iterm_id)
REFERENCES Product_Item(Item_id) )
การแก้ไขเทเบิลโดยเพิ่ม Primary Key และ Foreign Key โดย Transaction – SQL
เมื่อสร้างเทเบิลไปแล้ว และต้องการเพิ่มส่วนที่เป็น Primary key หรือ Foreign Key
CAPJOR หน้าจอ
ตัวอย่าง แก้ไขเทเบิล Order_Details โดยเพิ่มส่วนของคอนสเตรนท์ Primary Key
ALTER TABLE Order_Details
ADD CONTRAINT pk_order_id PRIMARY KEY (Order_id)
ตัวอย่าง แก้ไขเทเบิล Order_Details โดยเพิ่มส่วนของคอนสเตรนท์ Foreign Key
ALTER TABLE Order_Details
ADD CONTRAINT iter_id_ref REFERENCES Product_Item (Item_id))
การสร้าง Unique โดย Enterprise Manager
การกำหนดคอนสเตรนท์แบบ Unique นั้น มักจะกำหนดให้กับคอลัมน์ที่ต้องการให้มีข้อมูลที่ไม่ซ้ำกัน ซึ่งอาจเป็นคอลัมน์ใด ๆ ที่ไม่ใช่ Primary Key ส่วนคอลัมน์ที่เป็น Primary Key จะมีคอนสเตรนท์ เป็น Unique อยู่แล้ว และสามารถกำหนดให้หลาย ๆ คอลัมน์มีคอนสเตรนท์ Unique ได้
ตัวอย่าง จะสร้างคอลัมน์ ISBN และ Book_title ในเทเบิล Book เป็น Unique ซึ่งเมื่อนำ 2 คอลัมน์มารวมกัน ข้อมูลทุก ๆ แถวของทั้งสองคอลัมน์นั้นจะมีค่าไม่ซ้ำกันด้วย
CAPJOR หน้าจอ
CAPJOR หน้าจอ
CAPJOR หน้าจอ
การสร้าง Check โดย Enterprise Manager
การกำหนดให้คอลัมน์มีคอนสเตรนท์แบบ Check เพื่อให้คอลัมน์รับข้อมูลตามเงื่อนไขที่กำหนดไว้เท่านั้นโดยเขียนเป็นเงื่อนไขแบบต่าง ๆ ดังนี้
วิธีการสร้าง Check ทำได้ดังนี้
CAPJOR หน้าจอ
การสร้าง Unique และ Check โดย Transaction – SQL
เมื่อมีความต้องการกำหนดคอนสเตรนท์ให้ข้อมูลไม่ซ้ำกัน หรือตรวจสอบความถูกต้องของข้อมูลตามเงื่อนไข สามารถเลือกใช้คอนสเตรนท์ Unique และ Check ตามลำดับ
CAPJOR หน้าจอ
ตัวอย่าง
USE pubs
GO
CREATE TABLE Customer
(Cust_id smallint NOT NULL ,
First_name varchar(20),
Last_name varchar(20),
Address varchar(80),
CONSTRAINT unique_fullname
UNIQUE NONCLUSTERED (First_name, Last_name),
CONSTRAINT check_cust_id
CHECK (Cust_id LIKE ‘[0-9][0-9][0-9][0-9][0-9]’)
ในตัวอย่างข้างต้นกำหนดให้ Cust_id กำหนดให้เป็น char (5) รับข้อมูลในแต่ละหลักได้ เฉพาะ 0 ถึง 9 เท่านั้น และจากคอนสเตรนท์ unique_fullname หมายถึง เมื่อรวม first_name และ last_name เข้าด้วยกันแล้วจะไม่ซ้ำกับแถวอื่น
นอกจากรูปแบบข้างต้นที่กำหนด Check ไว้ท้ายคำสั่งแล้ว อาจกำหนด Check ไว้ต่อท้าย คอลัมน์นั้นเลยก็ได้
ตัวอย่าง แสดงการสร้างเทเบิลโดยมี Check Constraint
USE pubs
GO
CREATE TABLE Customer
(Cust_id smallint NOT NULL,
CONSTRAINT check_cust_id
CHECK (Cust_id LIKE ‘[0-9][0-9][0-9][0-9][0-9]’) ,
First_name varchar(20),
Last_name varchar(20),
Address varchar(80),
CONSTRAINT unique_fullname
UNIQUE NONCLUSTERED (First_name, Last_name))
การ Disable และ Enable คอนสเตรนท์โดย Transaction – SQL
การที่มีคอนสเตรนท์ในเทเบิลไม่ว่าจะเป็น Check, Foreign Key หรืออื่น ๆ นั้น จะพบว่าการจัดการกับข้อมูลทุกครั้งจะทำให้ใช้เวลาเพิ่มมากขึ้น แต่ในบางกรณีที่ต้องการทำงานบางอย่างให้รวดเร็ว เช่น การ Load ข้อมูลเป็นจำนวนมาก เพิ่มหรืออัพเดทข้อมูลทีละมาก ๆ หรือการทำ Replicate ดาต้าเบสข้ามเครื่อง ซึ่งข้อมูลอาจผ่านการตรวจสอบมาแล้ว ก็สามารถที่จะปิดหรือ Disable การทำงานของคอนสเตรนท์เหล่านี้ชั่วคราว และเมื่อต้องการให้คอนสเตรนท์เหล่านั้นกลับมาทำงานเหมือนเดิมก็ให้สั่ง Enable ใหม่
CAPJOR หน้าจอ
ตัวอย่าง ให้ Disable คอนสเตรนท์ Foreign Key ของเทเบิล Order_Details (จากหัวข้อการสร้าง Primary Key และ Foreign key)
ALTER TABLE Order_Details
NOCHECK CONSTRAINT item_id_ref
ตัวอย่าง ให้ Enable คอนสเตรนท์ Foreign Key ของเทเบิล Order_Details
ALTER TABLE Customer
NOCHECK CONSTRAINT check_cust_id
ตัวอย่าง ให้ Enable คอนสเตรนท์ Check ของเทเบิล Customer
ALTER TABLE Customer
CHECK CONSTRAINT check_cust_id
การลบคอนสเตรนท์ โดย Transaction – SQL
เมื่อต้องการยกเลิกคอนสเตรนท์แบบถาวรทำได้โดยการสั่ง Drop คอนสเตรนท์นั้น
CAPJOR หน้าจอ
ตัวอย่าง ให้ลบคอนสเตรนท์ชื่อ pk_order_id จากเทเบิล Order_Details
ALTER TABLE Order_Details
DROP CONSTRAINT pk_order_id
การจัดการข้อมูลในเทเบิล
ในการเพิ่มและแก้ไขข้อมูลลงไปในเทเบิลคร่าว ๆ ดังนี้
การเพิ่มข้อมูลลงในเทเบิลโดย Enterprise Manager
ตัวอย่าง เพิ่มข้อมูลลงใน Table Type
CAPJOR หน้าจอ
การเพิ่มด้วย Insert…Values ลงในเทเบิลโดย Transaction SQL
เป็นคำสั่งที่ใช้ใส่ข้อมูลได้เพียงหนึ่งแถวต่อหนึ่งคำสั่ง
CAPJOR หน้าจอ
ตัวอย่าง ใส่ข้อมูลลงในเทเบิล Type
INSERT INTO TYPE (ID_type, Type_name)
VALUE(4, ‘การ์ตูน’)
การเพิ่มด้วย Select…..Into ลงในเทเบิลโดย Transaction SQL
คำสั่งนี้เป็นการสร้างเทเบิลรวมทั้งก็อปปี้ข้อมูลและชื่อคอลัมน์เท่านั้นจากเทเบิลเดิม เช่น สร้างเทเบิล Type_Bookและนำข้อมูลคอลัมน์ ID_type และ Type_name ของเทเบิล Type มาเป็นคอลัมน์ในเทเบิลใหม่นี้ด้วย
SELECT ID_type, Type_name
INTO Type_Test
FROM Type
หมายเหตุ ถ้าเอ็กซีคิวต์คำสั่งนี้ไม่ผ่าน อาจเกิดจากพร็อพเพอร์ต์ของดาต้าเบสที่เราใช้ ซึ่งไม่ได้กำหนด Select Into/Bulk Copy เป็น True
และถ้าใส่ข้อมูลให้ Type_Test ทุกคอลัมน์ ก็ทำได้โดยไม่ต้องระบุชื่อคอลัมน์ตามหลังชื่อเทเบิล
INSERT INTO Type_Test
VALUES (5, ‘ตลก’)
การเพิ่มด้วย Insert….Select ลงในเทเบิลโดย Transaction SQL
เป็นคำสั่งที่ช่วยในการใส่ข้อมูลลงในเทเบิลที่มีอยู่แล้ว โดยดึงข้อมูลที่ต้องการจากเทเบิลอื่น จาตัวอย่างที่แล้วมา Type_Test เป็นเทเบิลที่สร้างและก๊อปปี้ข้อมูลมาจากเทเบิล Type ถ้าหลังจากนี้ เทเบิล Type มีการเพิ่มข้อมูลอีกหลายรายการ และยูสเซอร์ต้องการจะใส่ข้อมูลส่วนที่เพิ่มขึ้นนี้ลงใน Type_Test สามารถทำได้ ดังนี้
INSERT INTO Type_Test
SELECT ID_type, Type_name
FROM Type
WHERE (ID_type
NOT IN (SELECT ID_type
FROM Type_Test))
การแก้ไขข้อมูลลงในเทเบิลโดย Enterprise Manager
ตัวอย่าง แก้ไขข้อมูลใน Table Type
CAPJOR หน้าจอ
การแก้ไขข้อมูลลงในเทเบิลโดย Transaction SQL
ข้อมูลที่มีอยู่ในเทเบิลสามารถที่จะปรับปรุงหรือแก้ไขใหม่ได้ โดยใช้คำสั่ง UPDATE ซึ่งในหนึ่งคำสั่งอาจอัพเดทข้อมูลหนึ่งแถว ทีละหลายแถว หรือทุก ๆ แถวในเทเบิลนั้นเลยก็ได้
CAPJOR หน้าจอ
ค่าที่กำหนดให้ใหม่ของแต่ละคอลัมน์นั้นจะใส่ไว้หลังคำว่า Set แต่ถ้ามีมากกว่าหนึ่งคอลัมน์ให้คั่นด้วย , (comma)
หมายเหตุ ถ้าไม่ระบุ Where การแก้ไขข้อมูลมีจะผลกับข้อมูลทั้งเทเบิล ถ้าต้องการแก้ไขเพียงบางแถว ให้ใส่เงื่อนไข หรือ Where
ตัวอย่าง แก้ไขข้อมูลในเทเบิล Type ให้เปลี่ยนข้อมูลแถวทีมี ID_type = 1 เฉพาะคอลัมน์ Type_name ให้มีค่าเป็น ‘การ์ตูน’
UPDATE Type SET Type_name = ‘การ์ตูน’
WHERE ID_Type = 1
ถ้าในตัวอย่างข้างต้นไม่ระบุ Where ไว้ด้วย จะแก้ข้อมูลทุก ๆ แถวในคอลัมน์ Type_name เป็น ‘การ์ตูน’ ทั้งหมด
นอกเหนือจาการอัพเดทข้างต้น ยังสามารถใช้ Subquery ช่วยในการอัพเดทในกรณีที่มีเงื่อนไขซับซ้อน
CAPJOR หน้าจอ
ถ้ามีการแก้ไขข้อมูลในคอลัมน์ Type_name ของเทเบิล Type และผู้ใช้ต้องการอัพเดทข้อมูลใน Type_Test ให้มีชื่อของ Type_name สอดคล้องกับ Type_name ของเทเบิล Type สามารถเขียนคำสั่งได้ดังนี้
UPDATE Type
SET Type_name =
(SELECT Type_name
FROM Type
WHERE Type.ID_type = Type_Test.ID_type)
จากตัวอย่าง คือการอัพเดทคอลัมน์ Type_name ของ Type_Test ให้มีชื่อตรงกับ Type_mane ของเทเบิล Type โดยที่บรรทัดที่ 3 – 5 จะทำการเช็คว่าคอลัมน์ของ Type_name ที่จะแก้ไขได้นี้จะต้องมี ID_type ตรงกัน
การลบข้อมูลในเทเบิลโดย Enterprise Manager
ตัวอย่าง ลบข้อมูลใน Table Type
CAPJOR หน้าจอ
การลบข้อมูลในเทเบิลโดย Transaction SQL
CAPJOR หน้าจอ
หมายเหตุ ถ้าไม่ระบุ Where การลบข้อมูลจะมีผลกับข้อมูลทั้งเทเบิล ถ้าต้องการลบเพียงบางแถวให้ใส่เงื่อนไข หรือ Where
ตัวอย่าง ลบข้อมูลในเทเบิล Type_Test เฉพาะแถวที่มีข้อมูลในคอลัมน์ ID_type เท่ากับ 1
DELETE Type_Test
WHERE ID_type =1
นอกเหนือจากการลบข้างต้น ยังสมารถใช้ Subquery ช่วยในการลบในกรณีที่มีเงื่อนไขซับซ้อน
CAPJOR หน้าจอ
ถ้าเทเบิล Type มีการลบข้อมูลบางรายการออกไป และผู้ใช้ต้องการลบข้อมูลออกจากเทเบิล Type_Test ที่สอดคล้องกันออกไปด้วย
DELETE Type_Test
WHERE ID_type NOT IN
(SELECT ID_type
FROM Type)
จากคำสั่งข้างต้นเป็นการลบข้อมูลใน Type_Test โดยเลือกเฉพาะแถวที่ ID_type ของ Type_Test ไม่มีอยู่ใน ID_type ของ Type
การลบข้อมูลทั้งเทเบิลโดย Transaction SQL
CAPJOR หน้าจอ
การใช้คำสั่ง Delete โดยที่ไม่ระบุ Where หรือ Truncate ต่างก็ให้ผลเหมือนกัน คือ ลบข้อมูลออกทั้งหมด แต่มีกลไกการทำงานต่างกันทำให้ Truncate ทำงานเร็วกว่า และกินกำลังเครื่องน้อยกว่า
การลบข้อมูลในคำสั่ง Delete นั้นจะลบทีละแถว และจะบันทึกการลบของแต่ละแถวลงใน Transaction Log แทน ทำให้ทำงานได้เร็ว แต่ไม่สามารถจะโรลแบ็ค (Roll Back) ข้อมูลที่ถูก Truncate ได้
นอกจากนี้ยังมีข้อที่แตกต่างกันอีกเล็กน้อย คือ เมื่อเรียกคำสั่ง Delete เพื่อลบข้อมูลทั้งเทเบิลแล้ว คอลัมน์ที่กำหนดไว้เป็น Identity จะยังคงเก็บค่าหลังสุดไว้ เมื่อใส่ข้อมูลในแถวใหม่ลงไปก็จะเพิ่มต่อจากค่าที่เก็บไว้หลังสุดนั้น ขณะที่ถ้าเพิ่มแถวในเทเบิลหลังเรียกคำสั่ง Truncate ค่าในคอลัมน์นั้นจะเริ่มใหม่ตามค่าเริ่มต้น (Seed) ที่กำหนดไว้
คำสั่ง Truncate ยังมีข้อจำกัดที่ไม่สามารถจะใช้กับเทเบิลหลักทีมีเทเบิลอื่น ที่มี คอนสเตรนท์ Foreign Key มาอ้างถึงได้
ตัวอย่าง ลบข้อมูลของ Type_Test ทั้งเทเบิล
TRUNCATE TABLE Type_Test
การสร้าง View สำหรับข้อมูล
คือ เทเบิลเสมือนที่สร้างจากการนำข้อมูลบางคอลัมน์ บางแถว จากเทเบิลตั้งแต่หนึ่งเทเบิลขึ้นไปมาจัดทำเป็นแถวและคอลัมน์เสมือนอย่างเทเบิลนั่นเอง ซึ่งวิวนี้ไม่ได้เก็บข้อมูลอย่างเทเบิลแต่ข้อมูลที่เห็น คือ ข้อมูลจากเทเบิลหลักทั้งสิ้น วิวจะเก็บเพียงแต่โครงสร้างที่จะไปเรียกข้อมูลจากเทเบิลเท่านั้น
วิวที่สร้างขึ้นมานี้จะนำมาใช้งานในลักษณะเดียวกันกับเทเบิลได้เลย คือ ใช้กับคำสั่งต่าง ๆ เช่น Select และส่วนมากมักจะใช้ในกรณีต่าง ๆ ดังนี้
ข้อจำกัดวิว
การใช้วิวยังมีข้อจำกัดบางอย่าง คือ
การสร้างวิวโดย Enterprise Manager
CAPJOR หน้าจอ
CAPJOR หน้าจอ
CAPJOR หน้าจอ
สำหรับการลบเทเบิลที่เลือกไปสร้างวิวนั้น สามารถทำโดยนำเมาส์ไปคลิกที่เทเบิลในส่วนของ Diagram Pane คลิกเมาส์ปุ่มขวาเลือก Remove
การสร้างวิวโดย Transaction SQL
CAPJOR หน้าจอ
ตัวอย่าง การสร้างวิวจากเทเบิลเดียว โดยสร้างวิวชื่อ Book_view จากเทเบิล Book และ Type
CREATE VIEW Book_view
AS
SELECT ISBN, Book_title, Book_auther, Book_price, Book_stock,
Book_note, Type_name
FROM Book, Type
ดูข้อมูลในวิวโดย Enterprise Manager
CAPJOR หน้าจอ
การเรียกดูข้อมูลจากวิวโดย Transaction SQL
การเรียกข้อมูลจากวิว ก็สามารถใช้คำสั่ง Select เหมือนกับการใช้กับเทเบิล
ตัวอย่าง เรียกดูวิวชื่อ Book_view
SELECT *
FROM Book_view
การลบวิวโดย Enterprise Manager
เมื่อไม่ต้องการใช้วิวอีกก็สามารถจะลบวิวทิ้งได้ โดยข้อมูลในเทเบิลยังคงอยู่ และเมื่อเรียกคิวรีของวิวนั้น คิวรีก็จะ Fail ไป จนกว่าจะสร้างวิวที่มีชื่อตรงกับวิวนั้นขึ้นมาใหม่
CAPJOR หน้าจอ
การลบวิวโดย Transaction SQL
CAPJOR หน้าจอ
ตัวอย่าง ลบวิวชื่อ Book_view
DROP VIEW Book_view