วันพุธที่ 6 มกราคม พ.ศ. 2553

บทที่ 3 การจัดการฐานข้อมูล

บทที่3

การจัดการฐานข้อมูล

คำสั่งของภาษา
ภาษา 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)
P (Precision) คือ การนับจำนวน รวมของเลขหน้าและหลังทศนิยม มีค่าตั้งแต่ 1 ถึง 28
S (Scale) คือ จำนวนตัวเลขหลัง ทศนิยม

±1.79E+308

4 (Precision<16)
8(Precision>=16)

Double p

±1.79E+308

8

Real

±1.79E+308

4

Numeric(p,s)
Decimal(p,s)

±103

2 ถึง 17

Money

±$922,337,203,685,477.5807

8

Smallmoney

±$214,748.3647

4

3.การจัดการสร้าง เพิ่ม และลดขนาดของดาต้าเบส
การสร้างดาต้าเบสโดย Enterprise Manager

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ปุ่มขวาที่ Database แล้วเลือก New Database จะปรากฏไดอะลอก Database Properties
  • ให้พิมพ์ชื่อฐานข้อมูลลงไปในช่อง Name กำหนดขนาดของไฟล์ข้อมูล
  • ระบุตำแหน่งของไฟล์ดาต้าเบสในช่อง Location หรือจะมีค่าตามดีฟอลต์ก็ได้
  • กำหนดขนาดของไฟล์ข้อมูลที่ช่อง Intial Size
  • ในกรอบ File Growth ถ้าเลือกออปชั่น By Percent แล้วใส่ค่า แต่ถ้าระบุเป็นขนาดที่ต้องการให้คลิกออปชั่น In Megabytes และระบุจำนวน
  • ใน กรอบ Maximum File Size คือ ระบุขนาดของไฟล์สูงสุดที่ขยายได้ ถ้าเลือกออปชั่น Unrestricted Filegrowth คือ ขยายจนเต็มดิสก์ หรือเลือก Restict Filegrowth คือ กำหนดขนาดของไฟล์สูงสุด

CAPJOR หน้าจอ

  • คลิกแท็ป Transaction Log เพื่อกรอกข้อมูล Transaction Log
  • คลิกเมาส์ที่ช่อง Intial Size เพื่อกำหนดขนาดไฟล์เริ่มต้นของ Transaction Log แล้วใส่ค่า
  • คลิกเช็คบ็อกซ์ Automatically Grow File
  • ที่กรอบ File Growth เลือกออปชั่น In Megabytes แล้วใส่ค่า (แสดงถึงหน่วย MB)
  • ที่กรอบ Maximum File Size เลือกออปชั่น Restrict File Growth (MB) แล้วใส่ค่าเป็น 5

CAPJOR หน้าจอ

  • คลิกปุ่ม OK

การสร้างดาต้าเบสโดย Transact-SQL

CREATE DATABASE database_name ON
PRIMARY(NAME = logical_file_name,
FILENAME = ‘os_file_name’,
SIZE = size
[,MAXSIZE = max_size| UNLIMITED]
[,FILEGROWTH = growth_increment])
LOG ON
(NAME = logical_file_name,
FLENAME = ‘os_file_name’,
SIZE = size
[,MAXSIZE = max_size | UNLIMITED]
[,FILEGROWTH = growth_increment])


ตัวอย่าง สร้างดาต้าเบสชื่อ First DB ให้มีขนาดของดาต้าเบสและ Transaction Log ดังนี้

  • Database มี Initial Size 8 MB, File Growth 20%. Maximum File Size 25 MB
  • Transaction Log มี Initial Size 2 MB, File Growth 2 MB. Maximum File Size 5 MB

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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในการอบด้านซ้ายให้นำเมาส์ไปคลิกที่โฟลเดอร์ Database

CAPJOR หน้าจอ

  • ในกรอบด้านซ้ายให้คลิกเมาส์เลือกชื่อดาต้าเบสที่จะดูรายละเอียด จะมีรายละเอียดแสดงที่วินโดว์ด้านขวา

Owner คือ ชื่อยูสเซอร์ที่สร้างดาต้าเบส
Date Created คือ วันที่สร้าง
Size คือ ขนาดของดาต้าเบส
Space Available คือ เนื้อที่ที่ยังว่างอยู่
Database Options คือ ออปชั่นของดาต้าเบส
Number of Users คือ จำนวน Database User ของ Pubs
นอกจากนี้ยังบอกรายละเอียดของแบ็คอัพว่าทำเมื่อใด เช่น Database Backup Differential Backup หรือ Transaction Log Backup

  • ถ้าคลิกที่แท็ป Tables & Indexes จะได้รายละเอียดของอินเด็กซ์ ขนาดของแต่ละเทเบิล

CAPJOR หน้าจอ

  • คลิกแท็ป Space Allocated เพื่อดูขนาดของเนี้อที่ที่ใช้ และเนื้อที่ว่างสำหรับ Data File และ Log File

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)
P (Precision) คือ การนับจำนวน รวมของเลขหน้าและหลังทศนิยม มีค่าตั้งแต่ 1 ถึง 28
S (Scale) คือ จำนวนตัวเลขหลัง ทศนิยม

±1.79E+308

4 (Precision<16)
8(Precision>=16)

Double p

±1.79E+308

8

Real

±1.79E+308

4

Numeric(p,s)
Decimal(p,s)

±103

2 ถึง 17

Money

±$922,337,203,685,477.5807

8

Smallmoney

±$214,748.3647

4

3.การจัดการสร้าง เพิ่ม และลดขนาดของดาต้าเบส
การสร้างดาต้าเบสโดย Enterprise Manager

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ปุ่มขวาที่ Database แล้วเลือก New Database จะปรากฏไดอะลอก Database Properties
  • ให้พิมพ์ชื่อฐานข้อมูลลงไปในช่อง Name กำหนดขนาดของไฟล์ข้อมูล
  • ระบุตำแหน่งของไฟล์ดาต้าเบสในช่อง Location หรือจะมีค่าตามดีฟอลต์ก็ได้
  • กำหนดขนาดของไฟล์ข้อมูลที่ช่อง Intial Size
  • ในกรอบ File Growth ถ้าเลือกออปชั่น By Percent แล้วใส่ค่า แต่ถ้าระบุเป็นขนาดที่ต้องการให้คลิกออปชั่น In Megabytes และระบุจำนวน
  • ใน กรอบ Maximum File Size คือ ระบุขนาดของไฟล์สูงสุดที่ขยายได้ ถ้าเลือกออปชั่น Unrestricted Filegrowth คือ ขยายจนเต็มดิสก์ หรือเลือก Restict Filegrowth คือ กำหนดขนาดของไฟล์สูงสุด

CAPJOR หน้าจอ

  • คลิกแท็ป Transaction Log เพื่อกรอกข้อมูล Transaction Log
  • คลิกเมาส์ที่ช่อง Intial Size เพื่อกำหนดขนาดไฟล์เริ่มต้นของ Transaction Log แล้วใส่ค่า
  • คลิกเช็คบ็อกซ์ Automatically Grow File
  • ที่กรอบ File Growth เลือกออปชั่น In Megabytes แล้วใส่ค่า (แสดงถึงหน่วย MB)
  • ที่กรอบ Maximum File Size เลือกออปชั่น Restrict File Growth (MB) แล้วใส่ค่าเป็น 5

CAPJOR หน้าจอ

  • คลิกปุ่ม OK

การสร้างดาต้าเบสโดย Transact-SQL

CREATE DATABASE database_name ON
PRIMARY(NAME = logical_file_name,
FILENAME = ‘os_file_name’,
SIZE = size
[,MAXSIZE = max_size| UNLIMITED]
[,FILEGROWTH = growth_increment])
LOG ON
(NAME = logical_file_name,
FLENAME = ‘os_file_name’,
SIZE = size
[,MAXSIZE = max_size | UNLIMITED]
[,FILEGROWTH = growth_increment])


ตัวอย่าง สร้างดาต้าเบสชื่อ First DB ให้มีขนาดของดาต้าเบสและ Transaction Log ดังนี้

  • Database มี Initial Size 8 MB, File Growth 20%. Maximum File Size 25 MB
  • Transaction Log มี Initial Size 2 MB, File Growth 2 MB. Maximum File Size 5 MB

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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในการอบด้านซ้ายให้นำเมาส์ไปคลิกที่โฟลเดอร์ Database

CAPJOR หน้าจอ

  • ในกรอบด้านซ้ายให้คลิกเมาส์เลือกชื่อดาต้าเบสที่จะดูรายละเอียด จะมีรายละเอียดแสดงที่วินโดว์ด้านขวา

Owner คือ ชื่อยูสเซอร์ที่สร้างดาต้าเบส
Date Created คือ วันที่สร้าง
Size คือ ขนาดของดาต้าเบส
Space Available คือ เนื้อที่ที่ยังว่างอยู่
Database Options คือ ออปชั่นของดาต้าเบส
Number of Users คือ จำนวน Database User ของ Pubs
นอกจากนี้ยังบอกรายละเอียดของแบ็คอัพว่าทำเมื่อใด เช่น Database Backup Differential Backup หรือ Transaction Log Backup

  • ถ้าคลิกที่แท็ป Tables & Indexes จะได้รายละเอียดของอินเด็กซ์ ขนาดของแต่ละเทเบิล

CAPJOR หน้าจอ

  • คลิกแท็ป Space Allocated เพื่อดูขนาดของเนี้อที่ที่ใช้ และเนื้อที่ว่างสำหรับ Data File และ Log File

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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ใน กรอบด้านซ้ายให้นำเมาส์ไปคลิกที่โฟลเดอร์ Database แล้วเลื่อนเมาส์ไปยังชื่อดาต้าเบสที่ต้องการกำหนดออปชั่น คลิกเมาส์ปุ่มขวาเลือก Properties
  • ที่หน้าจอ Properties คลิกที่แท็ป Options จะเห็นออปชั่นทั้งหมด จากนั้นถ้าต้องการเลือกให้ออปชั่นใดเป็น True ก็ให้คลิกที่เช็คบ็อกซ์หน้าข้อนั้น

CAPJOR หน้าจอ

  • ที่หน้าจอ Properties ให้คลิกที่เช็คบ็อกซ์หน้า Select Ino/Bulk Copy จากนั้นคลิก OK

การกำหนดออปชั่นให้กับดาต้าเบสด้วย Transact – SQL

Sp_dboption [[@dbname = ] ‘database’]
[,[@optname =] ‘option_name’]
[,[@optvalue = ] ‘value’]

ตัวอย่าง กำหนดให้ Pubs มีพร็อพเพอร์ตี้ ‘Select Into/Bulkcopy’ เป็น True
sp_dboption ‘pubs’ , ‘select into/bulkcopy’ , ‘true’

การเพิ่มขนาดดาต้าเบสโดย Exterprise Manager
เมื่อใช้ดาต้าเบสไประยะ ถ้าพบว่าขนาดของดาต้าเบสเล็กเกินไปก็ขยายเพิ่มเติมได้ โดยทำดังนี้

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ใน กรอบด้านซ้ายให้ดับเบิ้ลคลิก Folder Database แล้วเลือกคลิกขวาแล้วเลือก Properties จะเข้าหน้าจอ Database Properties คลิกแท็ป General การเข้าหน้าจอนี้ครั้งแรกจะมีไฟล์เดียว การเพิ่มขนาดทำได้ 2 วิธี
    • เพิ่มขนาดของไฟล์เดิม ทำได้โดยคลิกที่คอลัมน์ Space Allocated (MB) แล้วระบุขนาดของไฟล์ใหม่ซึ่งต้องมีค่ามากกว่าเดิมลงไป
    • เพิ่มไฟล์ใหม่ ทำได้โดยคลิกบรรทัดที่สองแล้วใส่รายละเอียดของไฟล์ใหม่

CAPJOR หน้าจอ

  • คลิก OK

การเพิ่มขนาดดาต้าเบสโดย Transact – SQL

ALTER DATABASE database_name
{Add FILE
| ADD LOG FILE
| MODIFY FILE
ส่วนของ กำหนดดังนี้
(NAME = logical_file_name,
FILENAME = ‘os_file_name’,
SIZE = size
[, MAXSIZE = max_size |UNLIMITED]
[, FILEGROWTH = GROWTH_INCREMENT])

ตัวอย่าง ขยายขนาดเนื้อที่ของดาต้าเบสชื่อ 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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ใน กรอบด้านซ้ายให้ดับเบิ้ลคลิก Folder Database แล้วเลือกคลิกขวาแล้วเลือก Properties จะเข้าหน้าจอ Database Properties คลิกแท็ป Transaction Log การเข้าหน้าจอนี้ครั้งแรกจะมีไฟล์เดียว การเพิ่มขนาดทำได้ 2 วิธี
    • เพิ่มขนาดของไฟล์เดิม ทำได้โดยคลิกที่คอลัมน์ Space Allocated (MB) แล้วระบุขนาดของไฟล์ใหม่ซึ่งต้องมีค่ามากกว่าเดิมลงไป
    • เพิ่มไฟล์ใหม่ ทำได้โดยคลิกบรรทัดที่สองแล้วใส่รายละเอียดของไฟล์ใหม่

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 โดยมีวิธีการดังนี้

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ใน กรอบด้านซ้ายให้นำเมาส์ไปคลิกที่โฟลเดอร์ Database แล้วเลื่อนเมาส์ไปยังชื่อดาต้าเบสที่ต้องการลดขนาด คลิกเมาส์ปุ่มขวาเลือก All Tasks > Shrink Database
  • ที่หน้าจอ Shrink Database คลิกที่ Re – Organize Database… และ Shrink Database File… แล้วคลิก OK

  • Re – Organize Database – Move Data Pages to The Beginning of The Files หมายถึงการปรับเนื้อที่ในดาต้าเบสใหม่ โดยขยับมาใช้เนื้อที่ในส่วนต้น ๆ ของดาต้าเบสที่ว่างไว้ให้เต็ม
  • Shrink Database Files – Trucate Trailing Free Space From The end of The Files หมายถึงให้ลบเนื้อที่ว่างที่อยู่ทางด้านท้ายไฟล์ออกไป
  • R\Periodically Cheek to See If The Database Disk Space Be Shurnk หมายถึง กำหนดให้มีการลดขนาดของดาต้าเบสเป็นระยะ ๆ แต่ทั้งนี้ต้องกำหนดวันและเวลาที่จะทำ โดยคลิกที่ปุ่ม Schedule

การลดขนาดของดาต้าเบสโดย Transact – SQL
การปรับลดขนาดของดาต้าเบส เพื่อลดขนาดของพื้นที่ของทุกไฟล์ในส่วนที่ยังไม่ได้ใช้คำสั่งนี้จะทำได้กับ ดาต้าเบสเท่านั้น และมีข้อจำกัดว่าค่าที่ปรับลดนี้จะเล็กกว่าดาต้าเบส Model หรือเล็กกว่าขนาดเริ่มต้นที่สร้างไว้ไม่ได้

DBCC SHRINKDATABASE
database_name [, targer_percent]
[,{ NOTRUNCATE | TRUNCATEONLY }]


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
(file_name [, targer_size]
[,{EMPTYFILE | NOTRUNCATE | TRUNCATEONLY }] )

target_size คือ ขนาดของไฟล์เป็นเมกกะไบต์ที่เหลือหลังจากลดขนาดไฟล์แล้ว
EMPTYFILE คือ เป็นเพียงการย้ายข้อมูลในไฟล์ไปยังไฟล์อื่น ๆ ที่อยู่ในกรุ๊ปเดียวกัน และไม่อนุญาตให้บันทึกข้อมูลลงในไฟล์เดิมได้ และถ้าต้องการจะลบไฟล์นี้ทิ้งไห้ใช้คำสั่ง Aletr Database ที่มีออปชั่น Remove File

ALTER DATABASE databasename
REMOVE FILE logical_file_name

ตัวอย่าง ให้ลดขนาดไฟล์ในส่วนที่เป็น Transaction Log ของด้าต้าเบส Pubs โดยให้เหลือเนื้อที่เพียง 10 เมกกะไบต์
DBCC SHRINKFILE (Pubs_Log, 10)

การลบดาต้าเบสโดย (Enterprise Manager)

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้นำเมาส์ไปคลิกที่โฟล์เดอร์ Database แล้วเลื่อนเมาส์ไปยังชื่อดาต้าเบสที่ต้องการลบ คลิกเมาส์ปุ่มขวาเลือก Delete
  • จะแสดงหน้าต่างการยืนยัน ถ้าแน่ใจคลิก OK

การลบดาต้าเบสโดย Transact – SQL

DROP DATABASE database_name [,…]

ตัวอย่าง ลบ Database ชื่อ Pubs
DROP DATABASE Pubs

4.การจัดการเทเบิล
เทเบิลนั้นถือได้ว่าเป็นออปเจ็กต์ประเภทหนึ่งของดาต้าเบส ซึ่งใช้เก็บข้อมูลต่าง ๆ ไว้โดยมีโครงสร้างเหมือนตาราง 2 มิติ คือ ถ้ามองในแนวนอน คือแถวข้อมูล (Row) และถ้ามองในแนวตั้ง คือ คอลัมน์ของข้อมูล (column) ก่อนการสร้างเทเบิลจะต้องกำหนดรายละเอียดของเทเบิลได้ก่อน
หลักเกณฑ์การสร้างเทเบิล
ในการสร้างเทเบิลนั้นมีหลักเกณฑ์คร่าว ๆ ดังนี้ คือ

  • ชื่อของคอลัมน์ภายในเทเบิลเดียววันต้องไม่ซ้ำกัน แต่ใช้ชื่อคอลัมน์เหมือนกัน แต่คนละเทเบิลได้
  • ขนาด ของข้อมูลเก็บได้ไม่เกิน 8060 ไบต์ต่อแถว โดยนับตามขนาดของชนิดข้อมูลและชนิดข้อมูลประเภท Image, Text แต่ละชนิดคิดขนาดเป็น 16 ไบต์ต่อแถว
  • มีจำนวนไม่เกิน 1024 คอลัมน์ต่อหนึ่งเทเบิล
  • ชื่อ ของเทเบิลจะต้องเป็นไปตามกฎของการตั้งชื่อ แต่อาจตั้งชื่อเทเบิลซ้ำกันโดยมีเจ้าของเป็นคนละคนกัน เวลาที่จะเรียกใช้ก็ให้ระบุชื่อเจ้าของพร้อมทั้งชื่อเทเบิล

การสร้างเทเบิลโดย 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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบสที่ต้องการ จะเห็นโฟลเดอร์ชื่อ Tables
  • คลิกเมาส์ปุ่มขวาที่ Tables แล้วเลือก New Table
  • ที่หน้าจอ Choose Name ให้ตั้งชื่อเทเบิลว่า Book แล้วคลิก OK
  • จะแสดงหน้าจอที่มีลักษณะเป็นตารางให้ใส่ชื่อคอลัมน์ที่ต้องการพร้อมทั้งรายละเอียดของคอลัมน์ในเทเบิล โดยแต่ละส่วนมีความหมาย ดังนี้

ชื่อ

ความหมาย

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

  • เมื่อ ใส่รายละเอียดของเทเบิลเรียบร้อยแล้ว ให้คลิกปุ่มที่ไอคอน Save บนทูลบาร์เพื่อบันทึก จากนั้นคลิกปุ่ม Close ที่มุมขาด้านบนเพื่อปิดหน้าจอ
  • เมื่อ กลับไปที่หน้าจอหลักของ Enterprise Manager อีกครั้ง จะเห็นเทเบิล Book ที่สร้าง ถ้าไม่เห็นชื่อเทเบิลให้คลิกเมาส์ปุ่มขวาที่ Tables แล้วเลือก Refresh

การสร้างเทเบิลโดย Transact – SQL

CREATE TABLE table_name
(column_name data_type [NULL | NOT NULL]
[[ DEFAULT Constrant_expression ]
| [ IDENTITY [( seed, increment )]
| [ ROWGUIDCOL ]]
[,…n ])

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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่โฟลเดอร์ดาต้าเบสที่ต้องการ จะเห็นโฟลเดอร์ชื่อ Tables
  • คลิกเมาส์ปุ่มขวาที่ Tables แล้วเลือก Design Table
  • ที่ หน้าจอ Design Table ให้คลิกบรรทัดที่ว่างแล้วเติมคอลัมน์ที่จะเพิ่มให้ครบ ถ้าจะแทรกระหว่างคอลัมน์ที่มีอยู่เดิมให้นำเมาส์ไปคลิกที่คอลัมน์ใด ๆ ในบรรทัดที่จะแทรกคอลัมน์ใหม่ คลิกเมาส์ปุ่มขวาแล้วเลือก Insert Column

  • เมื่อ ใส่รายละเอียดที่ต้องการแก้ไขเรียบร้อย ให้คลิกไอคอนปุ่ม Save เพื่อบันทึกแล้วคลิกปุ่ม Close ที่มุมขวาด้านบนเพื่อปิดหน้าจอ จากตัวอย่างเป็นการเพิ่มคอลัมน์ในเทเบิล

การเพิ่มคอลัมน์ในเทเบิลโดย Transaction – SQL

ALTER TABLE table_name
ADD column_name data_type [NULL | NOT NULL]
DEFAULT default_value [,…n]

ตัวอย่าง เพิ่มคอลัมน์ในเทเบิล Customer ดังนี้

  • Sex มีชนิดข้อมูลเป็น Char (1) และ Default เป็น ‘M’
  • Birth_date มีชนิดข้อมูลเป็น Datetime

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 แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบสที่ต้องการ จะเห็นโฟลเดอร์ชื่อ Tables
  • คลิกเมาส์ที่ปุ่มขวา Tables แล้วเลือก Design Table
  • ที่หน้าจอ Design Table ให้คลิกบรรทัดที่ต้องการลบ จากนั้นคลิกเมาส์ปุ่มขวา เลือก Delete Column

คลิกไอคอนปุ่ม Save บนทูลบาร์เพื่อบันทึกการแก้ไข

การลบคอลัมน์ในเทเบิลโดย Enterprise Manager
ขณะลบคอลัมน์สิ่งที่ควรระวัง คือ เมื่อสั่งลบและบันทึกจะไม่มีการถามยืนยันการลบอีกครั้ง ซึ่งหากเกิดเปลี่ยนใจไม่ต้องการลบคอลัมน์นั้น ให้คลิก Close ที่มุมขวาด้านบนเพื่อปิดหน้าจอเลย จากนั้นโปรแกรมจะถามว่าต้องการบันทึกหรือไม่ ให้ตอบ No

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบสที่ต้องการจะเห็นโฟลเดอร์ชื่อ Tables
  • คลิกเมาส์ปุ่มขวาที่ Tables แล้วเลือก Design Table
  • ที่หน้าจอ Design Table ให้คลิกบรรทัดที่ต้องการลบ จากนั้นคลิกเมาส์ปุ่มขวาเลือก Delete Column

CAPJOR หน้าจอ

  • คลิกไอคอนปุ่ม Save บนทูลบาร์เพื่อบันทึกการแก้ไข

การลบคอลัมน์ในเทเบิลโดย Transaction – SQL

ALTER TABLE table_name
DROP COLUMN column_name


ตัวอย่าง ลบคอลัมน์ Birth_date ในเทเบิล Customer
USE Northwind
ALTER TABLE Customer
DROP COLUMN Birth_date
GO

การแก้ไขขนาดคอลัมน์ หรือชนิดของข้อมูลโดย Enterprise Manager

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบสที่ต้องการ จะเห็นโฟลเดอร์ชื่อ Tables
  • คลิกเมาส์ปุ่มขวาที่ Tables แล้วเลือก Design Table
  • ที่ หน้าจอ Design Table ให้เมาส์ไปคลิกที่ช่องของ Data Type ในบรรทัดที่ต้องแก้ไขจากนั้นเลือกชนิดข้อมูลที่ต้องการ หรือเปลี่ยนเฉพาะขนาดก็ให้เลือกที่ช่อง Length (ถ้าเป็นข้อมูลชนิดตัวเลข เช่น Numeric ต้องแก้ไขที่ Precision และ Scale)

CAPJOR หน้าจอ

  • คลิกไอคอนปุ่ม Save บนทูลบาร์เพื่อบันทึกการแก้ไข

การแก้ไขขนาดคอลัมน์ หรือชนิดของข้อมูลโดย Transaction – SQL

ALTER TABLE table_name
ALTER COLUMN column_name new_data_type [NULL | NOT NULL]

การ แก้ไขคอลัมน์อาจจะเป็นการแก้ไขความยาวของคอลัมน์ หรือเปลี่ยนชนิดของข้อมูลแต่ทั้งนี้ถ้ามีเทเบิลข้อมูลอยู่แล้ว ต้องพิจารณาไม่ให้ชนิดข้อมูลใหม่กระทบกับข้อมูลที่มีอยู่เดิม
ตัวอย่าง แก้ไขเทเบิล Customer โดยเปลี่ยนขนาดคอลัมน์ Cust_name จาก vachar (30) เป็น vachar (50)
USE Nothwind
ALTER TABLE Customer
ALTER COLUMN Cust_name vachar (50)

การแก้ไขชื่อคอลัมน์โดย Enterprise Manager

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบสที่ต้องการ จะเห็นโฟลเดอร์ชื่อ Tables
  • คลิกเมาส์ปุ่มขวาที่ Tables แล้วเลือก Design Table
  • ที่ หน้าจอ Design Table ให้เมาส์ไปคลิกที่ช่องของ Column Name ในบรรทัดที่ต้องแก้ไขจากนั้นลบชื่อเดิมเป็นชื่อใหม่ได้ทันที แต่ทั้งนี้จะต้องมีชื่อไม่ตรงกันกับชื่อคอลัมน์อื่นที่อยู่ในเทเบิลนั้น ในที่นี้เปลี่ยนชื่อคอลัมน์ Book_intostock เป็น Book_stock
  • คลิกไอคอนปุ่ม Save บนทูลบาร์เพื่อบันทึกการแก้ไข

การแก้ไขชื่อคอลัมน์โดย 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)

คอนสเตรนท์เป็นวิธีหนึ่งที่ช่วยตรวจเช็คความถูกต้องของข้อมูลให้อัตโนมัติ ทำให้สะดวกในการที่ไม่ต้องพัฒนาโปรแกรม เพื่อตรวจสอบความถูกต้องหรือความสอดคล้องกันของข้อมูลเมื่อมีการอ้างข้อมูล เมื่อมีการอ้างข้อมูลระหว่างเทเบิล นอกจากนี้ยังช่วยในการสร้างคีย์กำหนดความเป็นเอกลักษณ์หรือความไม่ซ้ำกันของ คอลัมน์เทเบิลได้ สำหรับประเภทของคอนสเตรนท์แบ่งออกได้เป็น

  • NOT NULL กำหนดให้คอลัมน์ไม่รับข้อมูลที่เป็น NULL
  • CHECK จำกัดค่าหรือเงื่อนไขของค่าที่จะใส่ลงในแต่ละคอลัมน์ และในเทเบิลหนึ่งอาจมีหลายคอนสเตรนท์ได้

CREATE TABLE Type
(ID_type int PRIMARY KEY,
Type_name varchar(50) ,
CONSTRAINT Chk_type CHECK (ID_type BETWEEN 1 and 99))

  • Unique กำหนดให้ข้อมูลในคอลัมน์หรือกลุ่มของคอลัมน์ในแต่ละแถวมีค่าที่ไม่ซ้ำกัน คือ จะไม่มีข้อมูลของแถวในคอลัมน์หนึ่งหรือกลุ่มของคอลัมน์นั้นซ้ำกันกับข้อมูล ในแถวอื่น ซึ่งจะคล้ายกันกับ Primary Key แต่ Primary Key จะไม่รับค่าที่ Null แต่ Unique จะรับค่าที่เป็น Null ได้
  • Pirmary Key กำหนดให้ข้อมูลในคอลัมน์หรือกลุ่มของคอลัมน์ในแต่ละแถวมีค่าที่ไม่ซ้ำกันและ ในหนึ่งเทเบิลจะมี Primary Key เพียงชุดเดียวเท่านั้น ในกรณีที่มีคอลัมน์อื่นหรือกลุ่มของคอลัมน์อื่นนอกเหนือจากที่กำหนดไว้เป็น Primary Key ซึ่งมีข้อมูลในแต่ละแถวไม่ซ้ำกัน ก็อาจกำหนดให้คอลัมน์นั้น ๆ เป็นคีย์ได้ เรียกว่า Candidate Key ในกรณีนี้อาจใช้ Candidate Key นี้เป็น Primary Key ก็ได้

สำหรับคอนสเตรนท์ต่าง ๆ นี้สามารถนำไปใช้ควบคุมในระดับคอลัมน์และเทเบิล

  • Foreign Key กำหนดความสัมพันธ์ระหว่างเทเบิลโดยข้อมูลที่เป็น Forign Key นี้จะมีอยู่ในทั้งสองเทเบิลที่เกี่ยวข้องกัน เพื่อใช้อ้างข้อมูลจากเทเบิลที่เกี่ยวข้องไปยังเทเบิลหลักได้
  • ในกระดับคอลัมน์ใช้เมื่อต้องการกำหนดให้กับคอมลัมน์และมีผลเฉพาะกับคอลัมน์นั้นเท่านั้น
  • ใน ระดับเทเบิลใช้เมื่อต้องการกำหนดให้กับหลาย ๆ คอลัมน์ที่อยู่ในเทเบิลนั้น เช่น ถ้า Primary Key ประกอบด้วยหลาย ๆ คอลัมน์ จะต้องกำหนดคอนสเตรนท์ในระดับเทเบิลโดยรวมทั้งสองคอลัมน์มาเป็น Primary Key

ตัวอย่าง เทเบิล 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 ลงในเทเบิลที่ยังไม่เคยมี Primary Key มาก่อน
  • เปลี่ยนแปลงหรือลบคอนสเตรนท์ Primary Key

เมื่อ มีการเพิ่ม Primary Key ในเทเบิลที่มีข้อมูลอยู่แล้ว SQL Server จะทำการตรวจสอบว่าข้อมูลในคอลัมน์หรือกลุ่มของคอลัมน์ที่เป็น Primary Key ว่ามีค่าเป็น NULL หรือมีข้อมูลซ้ำกันกับแถวอื่น ๆ หรือไม่ ซึ่งถ้ามีข้อมูลที่เกิดในลักษณะข้างต้น SQL Server จะส่งค่าที่แสดงความผิดพลาดกลับไป และไม่สร้างคอนสเตรนท์นั้นให้
ตัวอย่าง สร้าง Primary Key ให้กับคอลัมน์ ID_book ในเทเบิล book

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ใน กรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Tables แล้ว คลิกไปที่โฟลเดอร์ Table จะเห็นโฟลเดอร์ชื่อ Book
  • คลิกเมาส์ปุ่มขวาที่ Book แล้วเลือก Design Table
  • ให้ คลิกคอลัมน์ของเทเบิลที่จะสร้าง Primary Key คือ คลิกที่ ID_book แล้วคลิกเมาส์ปุ่มขวาเลือก Set Primary Key จะเห็นรูปกุญแจปรากฏอยู่หน้าคอลัมน์ ID_book (ถ้า Primary Key ประกอบไปด้วยกลุ่มของคอลัมน์ให้คลิกที่คอลัมน์แรกก่อน แล้วกดปุ่ม Ctrl ค้างไว้ จากนั้นก็นำเมาส์ไปคลิกอีกคอลัมน์ที่จะเป็น Primary Key ร่วม แล้วค่อยคลิกเมาส์ปุ่มขวาเลือก Set Primary Key)

CAPJOR หน้าจอ

  • คลิกไอคอนปุ่ม Save บนทูลบาร์เพื่อบันทึกการแก้ไข

การลบ Primary Key โดย Enterprise Manager

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ใน กรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Tables แล้ว คลิกไปที่โฟลเดอร์ Table จะเห็นโฟลเดอร์ชื่อ Book
  • คลิกเมาส์ปุ่มขวาที่ Book แล้วเลือก Design Table
  • ให้ คลิกคอลัมน์ของเทเบิลที่จะลบ Primary Key คือ คลิกที่ ID_book แล้วคลิกเมาส์ปุ่มขวาเลือก Set Primary Key จะไม่เห็นรูปกุญแจปรากฏอยู่หน้าคอลัมน์ ID_book

CAPJOR หน้าจอ

  • คลิกไอคอนปุ่ม Save บนทูลบาร์เพื่อบันทึกการแก้ไข

การสร้าง Foreign Key โดย Enterprise Manager
Foreign Key เป็นคอลัมน์หรือกลุ่มของคอลัมน์ที่ใช้ในการเชื่อมข้อมูลที่อยู่ใน 2 เทเบิลสำหรับคอลัมน์ที่จะเชื่อมกันในเทเบิล จะต้องมีขนาดเท่ากันและเป็นข้อมูลประเภทเดียวกัน ยกเว้นบางกรณี คือ

  • คอลัมน์ที่เป็นประเภท Char จะเชื่อมไปยังคอลัมน์ที่เป็นประเภท Varchar ได้
  • คอลัมน์ที่เป็นประเภท Binary จะเชื่อมไปยังคอลัมน์ที่เป็นประเภท Varbinary ได้
  • ส่วนคอลัมน์ที่กำหนดชนิดข้อมูลขึ้นมาเอง จะเชื่อมไปยังชนิดข้อมูลที่เป็นพื้นฐานของคอลัมน์นั้น

วิธีการสร้างต้องใช้ Database Diagram โดยจะเลือกให้ Type เป็นเทเบิลหลัก และ Book เป็นเทเบิลที่จะสร้าง Foreign Key ไปยัง Type

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Diagrams
  • ให้คลิกเมาส์ปุ่มขวาที่โฟลเดอร์ Diagrams แล้วเลือก New Database Diagram
  • ที่หน้าจอ Create Database Diagram Wizard ให้คลิก Next

  • ที่ ตำแหน่ง Available Tables ให้นำเมาส์ไปคลิกที่ชื่อของ Book แล้วกดปุ่ม Ctrl ค้างไว้ จากนั้นนำเมาส์ไปคลิกที่ Type คลิกปุ่ม Add จะเห็นชื่อของทั้งสองเทเบิลไปปรากฏที่กรอบด้านขวามือของ Tables to Add to Diagram
    • Add related Tables Automatically เมื่อเลือกออปชั่นนี้แล้วจะทำให้ SQL Server ดึงเอาชื่อเทเบิลที่มีความสัมพันธ์แบบ Primary Key และ Foreign Key กับเทเบิลที่ถูกเลือกไว้ในกรอบ Available Tables ไปปรากฏอยู่ในกรอบ Tables to Add to Diagram ด้วย
  • ที่หน้าจอ Completing the Create Database Diagram Wizard ให้คลิก Finish

  • ที่ หน้าจอ Diagram ให้คลิกเมาส์ที่ตำแหน่งสีเทา ๆ หน้าคอลัมน์ ID_type บนเทเบิล Type แล้วคลิกลากไปยังเทเบิล Book โดยวางเมาส์ลงบนตำแหน่งของคอลัมน์ ID_type

CAPJOR หน้าจอ

  • ที่ หน้าจอ Create Relationship ให้คลิก OK สำหรับ Relationship Name คือ ชื่อคอนสเตรนท์ที่เป็นแบบ Foreign Key จะแก้ไขหรือไม่ก็ได้ ส่วน Primary Key Table และ Foreign Key Table จะแสดงชื่อของคีย์ที่เชื่อมหรือลิงค์ถึงกันอยู่

CAPJOR หน้าจอ

  • ในหน้าจอ Diagram ให้คลิกไอคอนปุ่ม Save บนทูลบาร์เพื่อบันทึก จะเห็นหน้าจอ Save As ให้ตั้งชื่อของ ไดอะแกรมนี้ แล้วคลิก OK

CAPJOR หน้าจอ

  • ทีหน้าจอ Save ให้คลิก Yes แล้วเครื่องจะกลับไปที่หน้าจอของ Diagram อีกครั้งให้คลิกปุ่ม Close ที่มุมขวาด้านบนเพื่อปิดหน้าจอ

CAPJOR หน้าจอ
การลบ Foreign Key โดย Enterprise Manager

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Diagrams
  • ให้ ดับเบิลคลิกเมาส์ที่โฟลเดอร์ Diagrams จะเห็นวินโดว์ด้านขวามีไอคอนที่เป็นรูป Diagrams อยู่ ให้คลิกเมาส์ปุ่มขวาเลือก Design Diagram
  • ที่หน้า จอ Diagrams ให้คลิกเมาส์ตรงเส้นที่เชื่อมต่อทั้งสองเทเบิล แล้วคลิกเมาส์ปุ่มขวาเลือก Delete Relationship from Database เมื่อมีข้อความยืนยันการลบให้คลิก Yes

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 คอลัมน์มารวมกัน ข้อมูลทุก ๆ แถวของทั้งสองคอลัมน์นั้นจะมีค่าไม่ซ้ำกันด้วย

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Tables
  • ในกรอบด้านขวา ให้คลิกเมาส์ปุ่มขวาที่เทเบิล Book แล้วเลือก Design Table
  • คลิกที่ปุ่ม Table and Index Properties บนทูลบาร์ จะปรากฏหน้าจอ Properties ให้คลิกที่แท็ป Indexes/Keys จากนั้นคลิกปุ่ม New

CAPJOR หน้าจอ

  • ที่ กรอบของ Column Name ให้เลื่อนเมาส์มาที่บรรทัดว่าง ๆ จะปรากฏลูกศรด้านขวา ให้คลิกที่ลูกศรนั้นก็จะเห็นชื่อคอลัมน์ ให้เลือกชื่อคอลัมน์เป็น ISBN และ ในบรรทัดถัดมาให้เลือกคอลัมน์ Book_Title

CAPJOR หน้าจอ

  • ที่ Index Name ให้ตั้งชื่ออินเด็กซ์นี้เป็น Book_idx

CAPJOR หน้าจอ

  • คลิกที่เช็คบ็อกซ์หน้า Create Unique เพื่อสร้างคอนสเตรนท์ Unique
  • คลิ ก Close เมื่อหน้าจอกลับไปที่ Design Table ให้คลิกปุ่ม Save บนทูลบาร์เพื่อบันทึกแล้วปิดหน้าจอโดยคลิกปุ่ม Close ที่มุมขวาด้านบน

การสร้าง Check โดย Enterprise Manager
การกำหนดให้คอลัมน์มีคอนสเตรนท์แบบ Check เพื่อให้คอลัมน์รับข้อมูลตามเงื่อนไขที่กำหนดไว้เท่านั้นโดยเขียนเป็น เงื่อนไขแบบต่าง ๆ ดังนี้

  • เขียน เป็นเงื่อนไขทั่วไปที่ต้องการเช็ค เช่น ([BirthDate]) <> =0 and [Discount] <=1) เช็คค่าในคอลัมน์ Discount ต้องมีค่ามากกว่าหรือเท่ากับ 0 และน้อยกว่าหรือเท่ากับ 1 ส่วน (ID_type BETWEEN 1 and 99 ) คือ เช็คค่าในคอลัมน์ ID_type ต้องอยู่ในระหว่าง 1 ถึง 99
  • เขียนรูปแบบของ Check ตามลักษณะแพทเทิร์นข้อมูลของคอลัมน์นั้น เช่น (Cust_id LIKE ‘[0-9][0-9][0-9] – [0-9][0-9][0-9][0-9]’) หมายถึง ข้อมูลที่จะใส่ที่คอลัมน์นี้จะประกอบด้วยเลข 3 หลักแรก ที่มีค่าในแต่ละหลักเป็น 0 – 9 จากนั้นคั่นด้วยเครื่องหมาย – แล้วตามด้วยเลขอีก 4 หลัก แต่ละหลักมีค่าที่จะเป็น ไปได้ คือ 0 ถึง 9 เช่น ค่าที่สามารถใส่ให้คอลัมน์ Cust_id ได้แก่ 124 – 1200 เป็นต้น
  • เขียนในลักษณะที่เป็นกลุ่มของข้อมูล เช่น Check (pub_id IN ( ‘1548’ , ‘5874’))

วิธีการสร้าง Check ทำได้ดังนี้

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Tables
  • ในกรอบด้านขวา ให้คลิกเมาส์ปุ่มขวาที่เทเบิล Type แล้วเลือก Design Table
  • คลิ กที่ปุ่ม Table and Index Properties บนทูลบาร์ จะปรากฏหน้าจอ Properties ให้คลิกที่แท็ป Tables จากนั้นคลิกปุ่ม New จะได้ชื่อของคอนสเตรนท์ Check ชื่อ CK_Type เป็น ดีฟอลต์ให้
  • ที่กรอบของ Constraint Expression ให้ใส่รูปแบบหรือแพทเทริร์นที่ใช้เช็คค่าของ ID_type ให้มีค่า 2 หลัก และแต่ละหลักต้องเป็นเลข 0 หรือ 9 เท่านั้น ดังรูปแบบ ([ID_type] like ‘[0 - 9] [0-9]’)
    • Check Exitsting Data on Creation เมื่อเลือกออปชั่นนี้จะทำให้มีการเช็คข้อมูลที่มีอยู่ในเทเบิลว่าตรงตาม เงื่อนไขของคอนสเตรนท์ที่สร้างขึ้น
    • Enable Constraint for Insert and Update ให้คอนสเตรนท์นี้มีผลต่อการทำงานเมื่อมีการ Insert และ Update
    • Enable Constraint for Replication ให้คอนสเตรนท์นี้มีผลต่อการก๊อปปี้ข้อมูลข้ามดาต้าเบส

CAPJOR หน้าจอ

  • คลิก Close เมื่อหน้าจอกลับไปที่ Design Table ให้คลิกปุ่ม Save บนทูลบาร์เพื่อบันทึก และปิดหน้าจอที่มุมขวาด้านบน

การสร้าง 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 หน้าจอ

  • All หมายถึง ให้มีผลกับทุกคอนสเตรนท์
  • Check หมายถึง ให้ Enable คอนสเตรนท์ คือ มีผลให้คอนสเตรนท์นั้นกลับมาทำงานเหมือนเดิม
  • No Check หมายถึง การ Disable คอนสเตรนท์ซึ่งเป็นการยกเลิกคอนสเตรนท์นั้นชั่วคราว

ตัวอย่าง ให้ 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

การจัดการข้อมูลในเทเบิล
ในการเพิ่มและแก้ไขข้อมูลลงไปในเทเบิลคร่าว ๆ ดังนี้

  • ไม่สามารถป้อนข้อมูลที่มีค่าซ้ำกันในคอลัมน์ที่เป็น Primary Key หรือคอลัมน์ที่มีคอนสเตรนท์แบบ Unique ได้
  • การ เพิ่ม หรือการแก้ไขต้องระวังคอนสเตรนท์ Foreign Key ด้วย คือ ถ้ามีคอลัมน์ใดที่มีการอ้างอิงไปยังเทเบิลหลักก็ต้องป้อนหรือแก้ไขข้อมูลให้ สอดคล้องกัน เช่น ข้อมูลที่เพิ่มหากยังไม่มีในเทเบิลหลัก ก็ต้องเพิ่มในเทเบิลหลักเสียก่อน
  • คอลัมน์ที่เป็น Identity ไม่ต้องใส่ค่า และจะแก้ไขไม่ได้
  • คอลัมน์ที่เป็น Default จะใส่ค่าหรือไม่ใส่ก็ได้ ถ้าไม่ใส่จะได้ค่าตามที่กำหนดไว้ที่ Default
  • คอลัมน์ที่ระบุว่าเป็น Not Null จะต้องใส่ค่าทุกครั้ง
  • พึงระวังคอนสเตรนท์ Check หรือ Rule ของคอลัมน์ เพราะข้อมูลที่ใส่ในคอลัมน์ต้องเป็นไปตามกฎที่ระบุไว้
  • สำหรับ ข้อมูลที่เป็นวันที่แนะนำว่ารูปแบบการป้อนควรเป็น mm/dd/yy hh:mm:ss {PM หรือ AM} ซึ่งมีความละเอียดของเวลาถึงระดับวินาที โดยจะให้ปีเป็น yy 2 หลักหรือเป็น yyy 3 หลัก แต่ขอแนะนำให้ใช้ปีเป็น yyyy 4 หลัก นอกจากนี้จะใช้ – แทน / ในรูปแบบวันที่ก็ได้เมื่อเอ็กซีคิวต์แล้ว รูปแบบวันที่จะกลายเป็นแบบดีฟอลต์ mm/dd/yy และตามด้วยเวลาที่เราป้อน

การเพิ่มข้อมูลลงในเทเบิลโดย Enterprise Manager
ตัวอย่าง เพิ่มข้อมูลลงใน Table Type

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Tables
  • ใน กรอบด้านขวา ให้คลิกเมาส์ปุ่มขวาที่เทเบิล Type แล้วเลือก Open Table > Return All Rows เพื่อแสดงข้อมูลทั้งหมาดในเทเบิล และถ้าเลือก Return Top จะให้ระบุว่าต้องการแสดงเฉพาะกี่แถวแรก
  • จะแสดง หน้าจอ Data in Table ‘Type’ ซึ่งเป็นตารางว่าง ๆให้ เนื่องจากยังไม่มีข้อมูลในเทเบิลนี้เลย ให้ใส่ข้อมูลลงไป โดยคลิกเมาส์ไปยังช่องแรกของแถวแรกในหน้าจอ เมื่อใส่ข้อมูลจนถึงช่องสุดท้ายของเทเบิลพอเคาะ Enter เคอร์เซอร์จะมารอที่แถวใหม่ของตาราง

CAPJOR หน้าจอ

  • เมื่อ คีย์ข้อมูลเรียบร้อยแล้วต้องบันทึกขัอมูลโดยคลิกที่ปุ่ม Run บนทูลบาร์ เพื่อให้ระบบทำาการเอ็กซีคิวต์ข้อมูลที่ป้อนเข้าไปก็ได้ ซึ่งการเอ็กซีคิวต์นี้จะทำการบันทึกข้อมูลลงบนดาต้าเบสด้วย ในกรณีที่มีการป้อนข้อมูลที่มีปริมาณมากควรจะสั่งบันทึกข้อมูลลงบนดาต้าเบส ให้บ่อย ๆ ถ้าจะปิดงานให้คลิกปุ่ม Close ที่มุมขวาด้านบน

การเพิ่มด้วย Insert…Values ลงในเทเบิลโดย Transaction SQL
เป็นคำสั่งที่ใช้ใส่ข้อมูลได้เพียงหนึ่งแถวต่อหนึ่งคำสั่ง
CAPJOR หน้าจอ

  • Table_name คือ ชื่อเทเบิลที่จะใส่ข้อมูล
  • Colmn_list คือชื่อคอลัมน์ที่ต้องการใส่ข้อมูล ให้ใช้ (Comma) คั่นแต่ละคอลัมน์ มักใช้ในกรณีที่ไม่ต้องการใส่ข้อมูลครบทุกคอลัมน์ สำหรับคอลัมน์ที่ไม่ระบุให้ใส่ค่านั้นจะต้องไม่มีพร็อพเพอร์ตี้เป็น Not Null หรือถ้ามีพร็อพเพอร์ตี้เป็น Default จะมีค่าตามค่าดีฟอลต์ ถ้าไม่มีการระบุชื่อคอลัมน์ใด ๆ ไว้เลย ค่าที่กำหนดได้กลัง Values จะต้องใส่ให้ครบทุกคอลัมน์และค่าจะต้องตรงกับลำดับในคอลัมน์ในเทเบิลนั้น
  • Default | Null | Expression คือ ข้อมูลที่ใส่ลงในคอลัมน์ต่าง ๆ ตามที่ระบุใน column_list ถ้าเป็น Default คือ ใส่ค่าที่กำหนดไว้เป็นดีฟอลต์ของคอลัมน์นั้น หรือ Null ก็จะใส่ค่า Null และ Enpression คือ ค่าใด ๆ ที่กำหนดให้กับคอลัมน์นั้นและคั่นข้อมูลแต่ละตัวด้วย ,(Comma)

ตัวอย่าง ใส่ข้อมูลลงในเทเบิล 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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Tables
  • ในกรอบด้านขวา ให้คลิกเมาส์ปุ่มขวาที่เทเบิล Type แล้วเลือก Open Table > Return All Rows เพื่อแสดงข้อมูลทั้งหมดเทเบิล
  • จะ แสดงหน้าจอ Data in Table ‘Type’ ซึ่งมีข้อมูลที่เรากรอก ให้เลื่อนเมาส์ไปยังข้อมูลที่แก้ไข ในที่นี้จะแก้ไขข้อมูลในคอลัมน์ Type_name จากกฎหมาย เป็นอาหาร

CAPJOR หน้าจอ

  • เมื่อ คีย์ข้อมูลเรียบร้อยแล้ต้องบันทึกข้อมูลโดยคลิกที่ปุ่ม Run บนทูลบาร์ เพื่อให้ระบบทำการเอ็กซีคิวต์ข้อมูลที่ป้อนเข้าไปก็ได้ ซึ่งการเอ็กซีควต์นี้จะทำการบันทึกข้อมูลลงบนดาต้าเบสด้วย ถ้าจะปิดงานให้คลิกปุ่ม Close ที่มุมขวาบน

การแก้ไขข้อมูลลงในเทเบิลโดย 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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ Tables
  • ใน กรอบด้านขวา ให้คลิกเมาส์ปุ่มขวาที่เทเบิล Type แล้วเลือก Open Table > Return All Rows เพื่อแสดงข้อมูลทั้งหมดเทเบิล และถ้าเลือก Return Top จะให้ระบุว่าต้องการแสดงเฉพาะกี่แถวแรก
  • จะแสดง หน้าจอ Data in Table ‘Type’ ซึ่งมีข้อมูลที่เรากรอก ให้เลื่อนเมาส์ไปคลิกที่แถวที่ต้องการลบ ซึ่งจะเห็นเป็นแถบดำปรากฏอยู่ กดปุ่ม Delete บน Keyboard คลิก Yes เพื่อยืนยัน

CAPJOR หน้าจอ

  • ถ้าจะปิดงานให้คลิกปุ่ม Close ที่มุมขวาบน

การลบข้อมูลในเทเบิลโดย 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 และส่วนมากมักจะใช้ในกรณีต่าง ๆ ดังนี้

  • การ สร้างวิวให้เห็นบางคอลัมน์ บางแถว จากข้อมูลในเทเบิลหลัก จะช่วยทำให้เกิดความปลอดภัยของข้อมูลมากขึ้น โดยกำหนดให้ผู้ใช้เห็นข้อมูลจากวิว แทนที่จะเห็นข้อมูลจากเทเบิลหลัก และเลือกข้อมูลเหล่านั้นในวิวได้เหมือนกับเทเบิล
  • การ สร้างวิวเพื่อดึงข้อมูลบางส่วนจากเทเบิล หรือหลายเทเบิลให้แสดงเฉพาะคอลัมน์ที่จะนำไป ใช้ในการคิวรี จะช่วยให้การคิวรีง่ายขึ้น และไม่ซับซ้อน
  • ช่วย ให้การกำหนดสิทธิ์ในการใช้ข้อมูลทำได้ง่ายขึ้น คือ ไม่ต้องคอยกำหนดสิทธิ์ในการใช้ให้ กับแต่ละคอลัมน์ในเทเบิลแต่กำหนดสิทธิ์ที่วิวแทน
  • ช่วยให้สามารถนำวิวที่คิวรีข้อมูลจากหลาย ๆ เทเบิล ไปแปลงให้เป็นข้อมูลที่ใช้ในโปรแกรมอื่น ๆ ได้ง่าย

ข้อจำกัดวิว
การใช้วิวยังมีข้อจำกัดบางอย่าง คือ

  • การ เพิ่ม แก้ไข หรือลบข้อมูลผ่านวิวสามารถใช้คำสั่ง Select, Insert, Update และ Delete กับวิวได้ แต่ทั้งนี้ต้องไม่ขัดกับคอนสเตรนท์ เช่น ถ้าวิวดึงมาเพียงบางคอลัมน์ และคอลัมน์ที่เหลืออยู่ในเทเบิลหลักมีคอนสเตรนท์เป็น Not Null ก็จะทำให้เพิ่มข้อมูลผ่านวิวไม่ได้ (เพราะบังคับให้ใส่ข้อมูลกับคอลัมน์นั้นด้วย) และไม่สามารถเพิ่ม แก้ไข หรือลบข้อมูลผ่านวิว ถ้าวิวนั้นสร้างจากหนึ่งเทเบิลขึ้นไปหรือวิวที่สร้างจากคำสั่ง Union
  • การสร้างวิว ไม่สามารถใช้กับคำสั่ง Order by, Computer, Computer by และ Into

การสร้างวิวโดย Enterprise Manager

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ View
  • ให้คลิกขวาที่โฟลเดอร์ Views เลือก New View จะปรากฏหน้าจอใช้ออกแบบวิวแบ่งออกเป็นส่วนต่าง ๆ ดังนี้
    • Diagram Pane เป็นส่วนที่แสดงผังความสัมพันธ์ของเทเบิลต่าง ๆ ที่นำมาใช้สร้างวิว ซึ่งเทเบิลที่นำมาใช้สร้างวิวจะต้องเพิ่มเข้าไปใน Diagram Pane นี้ก่อนโดยคลิกปุ่ม Add Table และยังเป็นที่ใช้เลือกคอลัมน์ของเทเบิลต่าง ๆ ที่จะเป็นคอลัมน์ของวิวด้วย คือ ถ้าจะเลือกคอลัมน์ให้คลิกที่สี่เหลี่ยมเล็ก ๆ หน้าคอลัมน์นั้น หรือคลิกที่ช่องสี่เหลี่ยมเล็ก ๆ หน้า All Columns เพื่อเลือกทุกคอลัมน์ได้
    • Grid Pane เป็นส่วนที่ใช้กำหนดเงื่อนไขในการเลือกคอลัมน์ให้กับวิว เช่น เช็คบ็อกซ์ที่ช่อง Output หมายถึง ถ้ามีการเลือกคอลัมน์นั้นเพื่อสร้างวิวจะมีเครื่องหมาย... อยู่ และถ้าเลือกข้อมูลเพียงบางส่วนมาใช้ก็ให้ระบุเงื่อนไขสำหรับคอลัมน์ที่เลือกไว้แล้วที่ช่อง Criteria และ Or
    • SQL Pane คือส่วนที่แสดงคำสั่งจากรายละเอียดที่กำหนดไว้ใน Grid Panc หรือถ้าถนัดใช้คำสั่งของ Transaction SQL ก็ป้อนลงไปตรงนี้ได้เลย
    • Result Pane เป็นส่วนที่แสดงข้อมูลจากวิวที่กำลังสร้างนี้
  • ที่ หน้าจอออกแบบวิว ให้คลิกที่ปุ่ม Add Table บนทูลบาร์ จะได้หน้าจอ Add Table ที่หน้าจอนี้ให้คลิกชื่อเทเบิลที่จะไปสร้างวิว ถ้าต้องการใช้หลายเทเบิลก็กดปุ่ม Ctrl ค้างไว้แล้วคลิกทีละเทเบิล เมื่อเรียบร้อยคลิก Add และ Close ตามลำดับ

CAPJOR หน้าจอ

  • จะกลับไปที่หน้าจอการออกแบบวิว พร้อมแสดงรูปเทเบิลที่เราได้เลือกไว้บน Diagram Pane และใน SQL Pane ก็จะมีคำสั่งปรากฏอยู่ด้วย
  • ที่ Diagram Pane ให้คลิกเช็คบ็อกซ์หน้าคอลัมน์ที่จะไปสร้างวิว แล้วชื่อคอลัมน์จะไปแสดงที่ Grid Pane
  • ที่ Grid Pane เพิ่มเงื่อนไขในการเลือกข้อมูลเท่าที่ต้องการ

CAPJOR หน้าจอ

  • เมื่อกำหนดเรียบร้อย ให้คลิกปุ่ม Save เพื่อบันทึก จากนั้นให้ใส่ชื่อวิว แล้วคลิก OK

CAPJOR หน้าจอ

  • เครื่องจะกลับไปที่หน้าจอออกแบบวิวอีกครั้งหนึ่ง ให้คลิกปุ่ม Close ที่มุมขวา ด้านบนเพื่อเลิกการสร้างวิว

สำหรับการลบเทเบิลที่เลือกไปสร้างวิวนั้น สามารถทำโดยนำเมาส์ไปคลิกที่เทเบิลในส่วนของ Diagram Pane คลิกเมาส์ปุ่มขวาเลือก Remove

การสร้างวิวโดย Transaction SQL
CAPJOR หน้าจอ

  • [(column [,……n] ) ] คือ ชื่อคอลัมน์ในวิว เมื่อมีการสร้างวิวโดยดึงข้อมูลมาจากเทเบิล ชื่อคอลัมน์ที่เห็นบนวิว คือ ชื่อคอลัมน์ของเทเบิลนั่นเอง แต่ในบางกรณีที่มีการดึงคอลัมน์บนวิว ถ้าเป็นแบบนี้ต้องตั้งชื่อคอลัมน์ตอนสร้างวิวด้วย
  • Select_statement เป็นคำสั่งที่ใช้เลือก หรือดึงข้อมูลจากเทเบิลมาสร้างเป็นวิว คำสั่งนี้ดึงข้อมูลจากเทเบิลหรือวิวอื่น ๆ ก็ได้ แต่มีข้อจำกัดบางอย่าง คือ ในคำสั่งจะมี Order by, Computer, Computer by และ Into ไม่ได้ และอ้างถึงเทเบิลชั่วคราวไม่ได้เช่นกัน
  • [WITH CHECK OPTION] หมายถึงเมื่อสร้างวิวนี้แล้วการแก้ไขหรือเพิ่มเติมข้อมูลผ่านวิวจะตรวจสอบ ให้สอดคล้องกับตอนสร้างวิว เช่น ตอนสร้างวิวกำหนดว่าเลือกเฉพาะชื่อที่ขึ้นต้นด้วย A ถ้าต่อมาเพิ่มข้อมูลในวิวให้มีชื่อขึ้นต้นด้วย B ก็จะมีข้อความเตือนผิดพลาด

ตัวอย่าง การสร้างวิวจากเทเบิลเดียว โดยสร้างวิวชื่อ 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

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ View
  • ให้ คลิกขวาที่โฟลเดอร์ Views เลือก กรอบด้านซ้ายให้คลิกเมาส์ขวาวิวที่จะดูข้อมูล แล้วเลือก Open View > Return All Rows ซึ่งหมายถึง การแสดงข้อมูลทุกแถวจากวิวนั้น
  • จะปรากฏหน้าจอ Data in Table

CAPJOR หน้าจอ

การเรียกดูข้อมูลจากวิวโดย Transaction SQL
การเรียกข้อมูลจากวิว ก็สามารถใช้คำสั่ง Select เหมือนกับการใช้กับเทเบิล
ตัวอย่าง เรียกดูวิวชื่อ Book_view
SELECT *
FROM Book_view

การลบวิวโดย Enterprise Manager
เมื่อไม่ต้องการใช้วิวอีกก็สามารถจะลบวิวทิ้งได้ โดยข้อมูลในเทเบิลยังคงอยู่ และเมื่อเรียกคิวรีของวิวนั้น คิวรีก็จะ Fail ไป จนกว่าจะสร้างวิวที่มีชื่อตรงกับวิวนั้นขึ้นมาใหม่

  • เปิด Enterprise Manager แล้วเข้าสู่ Server ที่ต้องการ
  • ในกรอบด้านซ้ายให้คลิกเมาส์ที่เครื่องหมาย + ที่ Database
  • ในกรอบด้านซ้ายในคลิกเมาส์ที่เครื่องหมาย + โฟลเดอร์ดาต้าเบส Northwind เห็นโฟลเดอร์ View
  • ให้คลิกขวาที่โฟลเดอร์ Views เลือก กรอบด้านซ้ายให้คลิกเมาส์ขวาวิวที่จะต้องการลบแล้วเลือก Delete
  • ที่ หน้าจอ Drop Objects สามารถตรวจสอบว่ามีวิวนี้มีความสัมพันธ์กับออปเจ็กต์อื่นหรือไม่ โดยคลิกที่ Show Dependencies เมื่อดูเรียบร้อยและต้องการลบแน่นอนให้คลิก Drop All

CAPJOR หน้าจอ

การลบวิวโดย Transaction SQL
CAPJOR หน้าจอ
ตัวอย่าง ลบวิวชื่อ Book_view
DROP VIEW Book_view

ไม่มีความคิดเห็น:

แสดงความคิดเห็น