Apichart Nakarungutti
The Cake is a Lie
ในตอนก่อน พูดถึงการแสดงข้อมูล และค้นหาข้อมูลตามที่ต้องการ คราวนี้มาดูวิธีการสร้างฐานข้อมูล ตาราง และการเพิ่ม ลบ แก้ไขเปลี่ยนแปลงข้อมูลของตารางกันกันบ้าง
การสร้างฐานข้อมูลนั้นจะใช้คำสั่ง CREATE
ซึ่งผู้ใช้จะสร้างฐานข้อมูลได้หรือไม่นั้น ขึ้นอยู่กับว่า บัญชีนั้นมีสิทธิ์ที่จะทำได้หรือไม่ด้วย ซึ่งในหลาย ๆ โฮสต์ จะอนุญาตให้สร้างฐานข้อมูลผ่านทาง back-end แทนที่จะสร้างโดยตรงผ่านทางคำสั่ง SQL
CREATE DATABASE knowledge_db
เราก็จะได้ฐานข้อมูลเปล่า ๆ มาอันนึง ซึ่งจำเป็นต้องสร้างตารางขึ้นมาเพื่อเก็บข้อมูลเพิ่มเติมโดยใช้คำสั่ง CREATE
เช่นเดียวกัน โดยต้องระบุ ชื่อคอลัมภ์พร้อมคุณลักษณะต่าง ๆ อย่างเช่น ชนิดของข้อมูลในคอลัมภ์นั้น ๆ ด้วย
นอกจากนี้ ยังต้องคำนึงด้วยว่าระบบฐานข้อมูลที่ใช้อยู่เป็นตัวไหน เพราะคำสั่งนี้บางส่วนในบางระบบจะใช้ไม่เหมือนกัน (อย่างเช่นการกำหนด primary key และ การเพิ่มค่าอัตโนมัติในตัวอย่าง)
MySQL
-- define primary key in last argument
CREATE TABLE application
(
id int NOT NULL,
name varchar(255) NOT NULL,
category varchar(255),
developer varchar(255),
year int,
PRIMARY KEY (id)
)
SQL Server/Oracle/MS Access
-- define primary key as column attribute
CREATE TABLE application
(
id int NOT NULL PRIMARY KEY,
name varchar(255) NOT NULL,
category varchar(255),
developer varchar(255),
year int,
PRIMARY KEY (id)
)
PostgreSQL
-- use integer instead of int
-- and if that column is auto increment use serial instead
-- or add DEFAULT value to nextval('serial')
CREATE TABLE application
(
id serial PRIMARY KEY,
-- or use: id integer PRIMARY KEY DEFAULT nextval('serial'),
name varchar(255) NOT NULL,
category varchar(255),
developer varchar(255),
year integer
)
ตอนนี้ก็จะมีตาราง application เปล่า ๆ ขึ้นมาอันหนึ่ง
| id | name | category | developer | year | | — | —- | ——– | ——— | —- |
การเพิ่มข้อมูล (แถว) เข้าตารางจะใช้คำสั่ง INSERT INTO
INSERT INTO application
VALUES (null, 'Windows', 'OS', 'Mocrosoft', 1985)
ในที่นี้คอลัมภ์ id จะเพิ่มโดยอัตโนมัติ (auto_increment
) ถ้าส่งค่า null
ไประบบฐานข้อมูลจะใส่ค่าถัดไปให้โดยอัตโนมัติ และถ้าต้องการเพิ่มข้อมูลที่ละหลาย ๆ แถวก็สามารถใส่ค่าของ VALUES
ลงไปหลาย ๆ ชุดได้เช่นกัน
INSERT INTO application
VALUES (null, 'OS X', 'OS', 'Apple Inc.', 2001),
VALUES (null, 'Microsoft Office', 'Office Suite', 'Microsoft', 1990),
VALUES (null, 'Libre Office', 'Office Suite', 'The Document Foundation', 2011),
VALUES (null, 'Adobe Photoshop', 'Graphic Editor', 'Adobe', 1990),
VALUES (null, 'GIMP', 'Graphic Editor', 'The GIMP Development Team', 1996),
VALUES (null, 'Firefox', 'Browser', 'Mozilla', 2004)
ผลที่ได้จะเป็น
id | name | category | developer | year |
---|---|---|---|---|
1 | Windows | OS | Microsoft | 1985 |
2 | OS X | OS | Apple Inc. | 2001 |
3 | Microsoft Office | Office Suite | Microsoft | 1990 |
4 | Libre Office | Office Suite | The Document Foundation | 2011 |
5 | Adobe Photoshop | Graphic Editor | Adobe | 1990 |
6 | GIMP | Graphic Editor | The GIMP Development Team | 1996 |
7 | Firefox | Browser | Mozilla | 2004 |
ถ้าตารางนั้นมีข้อมูลเริ่มต้นอยู่ หรือไม่จำเป็นต้องใส่ค่าลงไปได้ สามารถที่จะระบุเฉพาะคอลัมภ์ที่ต้องการใส่ข้อมูลลงไปได้เช่นเดียวกัน
INSERT INTO application (name, year)
VALUES ('Chromium', 2008)
ผลที่ได้จะเป็น
id | name | category | developer | year |
---|---|---|---|---|
1 | Windows | OS | Microsoft | 1985 |
2 | OS X | OS | Apple Inc. | 2001 |
3 | Microsoft Office | Office Suite | Microsoft | 1990 |
4 | Libre Office | Office Suite | The Document Foundation | 2011 |
5 | Adobe Photoshop | Graphic Editor | Adobe | 1990 |
6 | GIMP | Graphic Editor | The GIMP Development Team | 1996 |
7 | Firefox | Browser | Mozilla | 2004 |
8 | Chromium | 2008 |
ส่วนการแก้ไขข้อมูลนั้นจะใช้ UPDATE
UPDATE application
SET name='Google Chrome', category='Browser', developer='Google Inc.'
WHERE name='Chromium'
ผลที่ได้จะเป็น
id | name | category | developer | year |
---|---|---|---|---|
1 | Windows | OS | Microsoft | 1985 |
2 | OS X | OS | Apple Inc. | 2001 |
3 | Microsoft Office | Office Suite | Microsoft | 1990 |
4 | Libre Office | Office Suite | The Document Foundation | 2011 |
5 | Adobe Photoshop | Graphic Editor | Adobe | 1990 |
6 | GIMP | Graphic Editor | The GIMP Development Team | 1996 |
7 | Firefox | Browser | Mozilla | 2004 |
8 | Google Chrome | Browser | Google Inc. | 2008 |
สิ่งที่ควรจำให้ขึ้นใจคือ จะแก้ไขข้อมูลต้องมี WHERE
เสมอ ไม่เช่นนั้นจะเป็นการแก้ไขข้อมูลทั้งตาราง! และควรจะใช้เงื่อนไขของ WHERE
อย่างรอบคอบ เพื่อไม่ให้ข้อมูลที่ไม่เกี่ยวข้องได้รับผลกระทบ
ส่วนการลบข้อมูลก็จะใช้ DELETE
ซึ่งจำเป็นต้องมี WHERE
เช่นกัน และที่สำคัญคือถ้าใช้ WHERE
ไม่รอบคอบ หรือไม่ใช้ ข้อมูลอาจจะหายไปทั้งตารางได้เช่นกัน
DELETE FROM application
WHERE category='Office Suite'
id | name | category | developer | year |
---|---|---|---|---|
1 | Windows | OS | Microsoft | 1985 |
2 | OS X | OS | Apple Inc. | 2001 |
5 | Adobe Photoshop | Graphic Editor | Adobe | 1990 |
6 | GIMP | Graphic Editor | The GIMP Development Team | 1996 |
7 | Firefox | Browser | Mozilla | 2004 |
8 | Google Chrome | Browser | Google Inc. | 2008 |
แม้ว่าจะใช้ DELETE
ลบข้อมูลทั้งตารางทิ้งไป แต่โครงสร้างตาราง ค่า index (ที่ใช้ในการค้นหาข้อมูล) รวมถึงค่าคุณลักษณะ (attribute) ต่าง ๆ ของตารางยังคงอยู่ ไม่ได้ถูกลบไปด้วย
DELETE FROM application
-- or add * for more meaningful
DELETE * FROM application
ตามด้วย
INSERT INTO application
VALUES (null, 'Internet Explorer', 'Browser', 'Microsoft', 1995)
ผลจะเป็น
id | name | category | developer | year |
---|---|---|---|---|
9 | Internet Explorer | Browser | Microsoft | 1995 |
แต่หากต้องการจะลบข้อมูลในตารางทิ้งจริง ๆ แนะนำให้ใช้ TRUNCATE
เพราะมันรวดเร็วกว่า และใช้ทรัพยากรน้อยกว่า
TRUNCATE TABLE application
หากจะลบตารางทั้งตารางทิ้งจะใช้คำสั่ง DROP
DROP TABLE application
ตาราง application ทั้งตารางรวมทั้งโครงสร้างจะหายไปจากฐานข้อมูล ถ้าจะใช้ตารางนี้อีก ต้องสร้างตารางขึ้นมาใหม่เสียก่อน
นอกจากลบตารางทิ้งแล้ว DROP
ยังสามารถลบฐานข้อมูลทั้งฐานข้อมูลทิ้งได้เช่นกัน (ทั้งนี้ขึ้นอยู่กับสิทธิ์ในการเข้าถึงฐานข้อมูลของบัญชีผู้ใช้อันนั้น ๆ ด้วย ว่าสามารถทำได้ถึงขั้นไหน)
DROP DATABASE knowledge_db