SQLite สร้าง แก้ไข วางตารางพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

SQLite การจัดการตารางนั้นอาศัยคำสั่งกำหนดข้อมูลสามคำสั่ง ได้แก่ CREATE TABLE สำหรับกำหนดตาราง, ALTER TABLE สำหรับเปลี่ยนชื่อหรือเพิ่มและเปลี่ยนแปลงคอลัมน์ และ DROP TABLE สำหรับลบตารางออกจากฐานข้อมูลโดยสมบูรณ์

  • 📐 สร้างตาราง: คำสั่ง CREATE TABLE กำหนดชื่อตารางและคอลัมน์ โดยแต่ละคอลัมน์จำเป็นต้องมีชื่อและชนิดข้อมูล
  • 🛡️ หลีกเลี่ยงข้อผิดพลาด: การเพิ่ม IF NOT EXISTS ในคำสั่ง CREATE TABLE หรือ IF EXISTS ในคำสั่ง DROP TABLE จะช่วยป้องกันข้อผิดพลาดในกรณีที่ตารางมีอยู่แล้วหรือหายไป
  • ✏️ แก้ไขตาราง: คำสั่ง ALTER TABLE ใช้สำหรับเปลี่ยนชื่อตาราง เพิ่มคอลัมน์ และในเวอร์ชันสมัยใหม่ SQLite เปลี่ยนชื่อหรือลบคอลัมน์เดียว
  • 🗑️ โต๊ะวางของ: คำสั่ง DROP TABLE จะลบตารางและทุกแถวรวมถึงดัชนีที่เกี่ยวข้องกับตารางนั้นอย่างถาวร
  • 📑 คัดลอกตาราง: คำสั่ง CREATE TABLE AS SELECT สร้างตารางใหม่จากคอลัมน์และแถวที่ได้จากการสืบค้นข้อมูล
  • 🤖 ความช่วยเหลือจากเอไอ: ผู้ช่วย AI แปลงข้อความเป็น SQL และ GitHub Copilot สร้างคำสั่ง CREATE, ALTER และ DROP จากข้อความภาษาอังกฤษธรรมดา

SQLite สร้าง แก้ไข ลบ ตาราง

ส่วนด้านล่างนี้แสดงวิธีการสร้างตาราง ปรับเปลี่ยนโครงสร้างตาราง และลบตารางในโปรแกรม SQLite3 ตัวอย่าง ครอบคลุมคำสั่ง CREATE TABLE, ALTER TABLE และ DROP TABLE

SQLite สร้างตาราง

วากยสัมพันธ์

ด้านล่างนี้คือไวยากรณ์ของคำสั่ง CREATE TABLE

CREATE TABLE table_name(
column1 datatype,
column1 datatype
);

ในการสร้างตาราง คุณควรใช้คำสั่ง “CREATE TABLE” ดังนี้:

CREATE TABLE guru99 (
  Id Int,
  Name Varchar
);

ภายในวงเล็บสองอันหลังชื่อตาราง คุณกำหนดคอลัมน์ของตาราง โดยแต่ละคอลัมน์ควรมีคุณสมบัติต่อไปนี้:

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

SQLite สร้างตารางหากยังไม่มีอยู่

เมื่อสคริปต์ทำงานมากกว่าหนึ่งครั้ง คำสั่ง CREATE TABLE แบบธรรมดาจะล้มเหลวหากตารางนั้นมีอยู่แล้ว และจะหยุดทำงานพร้อมแสดงข้อผิดพลาด SQLite วิธีนี้แก้ปัญหาด้วยคำสั่ง IF NOT EXISTS ที่เป็นตัวเลือก ซึ่งจะสร้างตารางก็ต่อเมื่อตารางนั้นไม่มีอยู่ และจะไม่ทำอะไรเลยหากมีอยู่แล้ว

CREATE TABLE IF NOT EXISTS guru99 (
  Id Int,
  Name Varchar
);

คำสั่งข้างต้นจะไม่ทำให้เกิดข้อผิดพลาด “ตารางมีอยู่แล้ว” ซึ่งทำให้ปลอดภัยที่จะวางไว้ที่ส่วนบนสุดของสคริปต์การตั้งค่าหรือการย้ายข้อมูล

หลักการเดียวกันนี้ใช้ได้ในทางกลับกันเมื่อคุณลบตาราง การเพิ่ม IF EXISTS ลงใน DROP TABLE จะช่วยหลีกเลี่ยงข้อผิดพลาดเมื่อตารางนั้นถูกลบไปแล้ว:

DROP TABLE IF EXISTS guru99;

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

วางตาราง

ในการลบตาราง ให้ใช้คำสั่ง “DROP TABLE” ตามด้วยชื่อตาราง ดังนี้:

DROP TABLE guru99;

เปลี่ยนตาราง

คุณสามารถใช้คำสั่ง “ALTER TABLE” เพื่อเปลี่ยนชื่อตารางได้ดังนี้:

ALTER TABLE guru99 RENAME TO guru100;

เพื่อตรวจสอบว่าชื่อตารางได้เปลี่ยนไปแล้ว คุณสามารถใช้คำสั่ง “.tables” เพื่อแสดงรายการตาราง และชื่อตารางควรจะเปลี่ยนไปดังนี้:

SQLite ผลลัพธ์จากไฟล์ .tables แสดงให้เห็นว่าตารางถูกเปลี่ยนชื่อจาก guru99 เป็น guru100

อย่างที่คุณเห็น ชื่อตาราง “guru99” เปลี่ยนเป็น “guru100” หลังจากใช้คำสั่ง “alter table”

SQLite เพิ่มคอลัมน์ - การใช้คำสั่ง ALTER TABLE

คุณสามารถใช้คำสั่ง “ALTER TABLE” เพื่อเพิ่มคอลัมน์ได้เช่นกัน:

ALTER TABLE guru100 ADD COLUMN Age INT;

การดำเนินการนี้จะแก้ไขตาราง “guru100” และเพิ่มคอลัมน์ใหม่ชื่อ “อายุ” เข้าไป

หากคุณไม่เห็นข้อความใดๆ แสดงขึ้น นั่นหมายความว่าคำสั่งนั้นสำเร็จ และได้เพิ่มคอลัมน์แล้ว การไม่เห็นข้อความหมายความว่าเคอร์เซอร์จะอยู่หลัง “sqlite>” โดยไม่มีข้อความใดๆ ต่อท้าย ดังนี้:

SQLite บรรทัดคำสั่งไม่แสดงผลลัพธ์ใดๆ หลังจากการดำเนินการ ALTER TABLE ADD COLUMN สำเร็จ

อย่างไรก็ตาม เพื่อตรวจสอบว่าคอลัมน์ถูกเพิ่มเข้าไปแล้ว เราสามารถใช้คำสั่ง “.schema guru100” ได้ คำสั่งนี้จะแสดงรายละเอียดของตาราง และคุณควรจะเห็นคอลัมน์ใหม่ที่เราเพิ่งเพิ่มเข้าไป:

SQLite ผลลัพธ์จาก .schema guru100 ที่แสดงคอลัมน์ Age ใหม่ที่เพิ่มลงในตาราง

SQLite คำสั่งแก้ไขตาราง: เปลี่ยนชื่อและลบคอลัมน์

นอกเหนือจากการเพิ่มเสาแล้ว เวอร์ชันสมัยใหม่ของ SQLite นอกจากนี้ยังสามารถเปลี่ยนชื่อคอลัมน์เดียวและลบคอลัมน์ได้ การเปลี่ยนชื่อคอลัมน์มีให้ใช้งานมาตั้งแต่ SQLite 3.25 และมันจะอัปเดตชื่อภายในคำจำกัดความของตาราง รวมถึงในทุกดัชนี ทริกเกอร์ และวิวที่อ้างอิงถึงคอลัมน์นั้นด้วย

ALTER TABLE guru100 RENAME COLUMN Name TO FullName;

วิธีการลบคอลัมน์ SQLite เวอร์ชัน 3.35 และเวอร์ชันต่อๆ ไปรองรับคำสั่ง DROP COLUMN โดยตรง:

ALTER TABLE guru100 DROP COLUMN Age;

ไม่สามารถลบคอลัมน์ได้หากคอลัมน์นั้นเป็นส่วนหนึ่งของคีย์หลัก ข้อจำกัดเฉพาะ หรือดัชนี (ในเวอร์ชันเก่ากว่า) SQLite สำหรับเวอร์ชันที่ไม่มีคำสั่ง DROP COLUMN วิธีแก้ปัญหาแบบดั้งเดิมคือการสร้างตารางใหม่ที่มีคอลัมน์ที่คุณต้องการ คัดลอกแถวไปยังตารางใหม่ ลบตารางเก่า และสุดท้ายเปลี่ยนชื่อตารางใหม่

วิธีการคัดลอกตารางใน SQLite โดยใช้คำสั่ง CREATE TABLE AS SELECT

บางครั้งคุณอาจต้องการสำเนาของตาราง ไม่ว่าจะเป็นเพื่อสำรองข้อมูลก่อนทำการเปลี่ยนแปลงที่มีความเสี่ยง หรือเพื่อใช้เป็นจุดเริ่มต้นสำหรับการสร้างตารางใหม่ SQLite สร้างตารางนี้ได้ในขั้นตอนเดียวด้วยคำสั่ง CREATE TABLE AS SELECT ซึ่งจะสร้างตารางใหม่ที่มีคอลัมน์มาจากคำสั่ง SQL และเติมข้อมูลลงในตารางด้วยแถวที่คำสั่งนั้นส่งคืนมา

CREATE TABLE guru100_backup AS SELECT * FROM guru100;

ตารางใหม่ “guru100_backup” จะได้รับคอลัมน์และทุกแถวเหมือนกับตาราง “guru100” หากต้องการคัดลอกเฉพาะบางแถว ให้เพิ่มเงื่อนไข WHERE ในคำสั่ง SELECT:

CREATE TABLE known_ages AS SELECT * FROM guru100 WHERE Age IS NOT NULL;

สิ่งสำคัญที่ควรจำไว้คือ คำสั่ง CREATE TABLE AS SELECT จะคัดลอกชื่อคอลัมน์ ชนิดข้อมูล และข้อมูล แต่จะไม่คัดลอกคีย์หลัก ข้อจำกัดอื่นๆ หรือดัชนี คุณต้องเพิ่มสิ่งเหล่านั้นลงในตารางใหม่ด้วยตนเอง หากต้องการให้ตารางที่คัดลอกมาใช้กฎเดียวกันกับตารางต้นฉบับ

SQLite ใส่ค่าลงในตาราง

ในการแทรกค่าลงในตาราง เราใช้คำสั่ง “INSERT INTO” ดังนี้:

INSERT INTO Tablename(colname1, colname2, ….) VALUES(valu1, value2, ….);

คุณสามารถละชื่อคอลัมน์ที่อยู่หลังชื่อตารางและเขียนได้ดังนี้:

INSERT INTO Tablename VALUES(value1, value2, ….);

ในกรณีเช่นนี้ หากคุณละเว้นชื่อคอลัมน์จากตาราง จำนวนค่าที่แทรกจะต้องเท่ากับจำนวนคอลัมน์ในตารางพอดี จากนั้นค่าแต่ละค่าจะถูกแทรกลงในคอลัมน์ที่เกี่ยวข้อง ตัวอย่างเช่น สำหรับคำสั่งแทรกต่อไปนี้:

INSERT INTO guru100 VALUES(1, 'Mike', 25);

ผลลัพธ์ของคำสั่งนี้จะเป็นดังต่อไปนี้:

SQLite คำสั่ง INSERT INTO เพิ่มแถวข้อมูลลงในตาราง guru100

  • ค่า 1 จะถูกแทรกเข้าไปในคอลัมน์ “id”
  • ค่า 'Mike' จะถูกแทรกเข้าไปในคอลัมน์ "ชื่อ" และ
  • ค่า 25 จะถูกแทรกเข้าไปในคอลัมน์ "อายุ"

แทรก … คำสั่งค่าเริ่มต้น

คุณสามารถเติมข้อมูลตารางด้วยค่าเริ่มต้นสำหรับคอลัมน์พร้อมกันได้ดังนี้:

INSERT INTO Tablename DEFAULT VALUES;

หากคอลัมน์ใดไม่อนุญาตให้มีค่าว่างหรือค่าเริ่มต้น คุณจะได้รับข้อผิดพลาดว่า “ข้อจำกัด NOT NULL ล้มเหลว” สำหรับคอลัมน์นั้น ดังต่อไปนี้:

SQLite ข้อผิดพลาด "NOT NULL constraint failed" จากคำสั่ง INSERT DEFAULT VALUES

คำถามที่พบบ่อย

ลำดับ SQLite ไม่มีคำสั่ง TRUNCATE TABLE หากต้องการล้างข้อมูลในตาราง ให้ใช้คำสั่ง DELETE FROM table_name โดยไม่ต้องระบุเงื่อนไข WHERE จากนั้นใช้คำสั่ง VACUUM เพื่อเรียกคืนพื้นที่ดิสก์ที่ว่างลง โครงสร้างตารางและคอลัมน์จะยังคงอยู่เหมือนเดิม

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

ที่ SQLite ในบรรทัดคำสั่ง คำสั่ง .tables จะแสดงชื่อตารางทั้งหมด จาก SQL ให้สอบถามตารางสคีมาในตัวด้วยคำสั่ง SELECT name FROM sqlite_master WHERE type = 'table'; ซึ่งใช้งานได้จากแอปพลิเคชันใดๆ ที่เชื่อมต่อกับฐานข้อมูลเช่นกัน

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

ใช่แล้ว คีย์หลักเป็นตัวเลือกเสริมใน SQLiteเมื่อคุณละเว้นข้อใดข้อหนึ่งไป SQLite ตารางยังคงเก็บ rowid ขนาด 64 บิตที่ซ่อนอยู่ซึ่งใช้ระบุแต่ละแถว ข้อจำกัดของคอลัมน์ เช่น PRIMARY KEY, UNIQUE และ NOT NULL เป็นตัวเลือกเสริมเมื่อคุณกำหนดตาราง

โดยค่าเริ่มต้นคือไม่ใช่ SQLite ใช้ ty แบบไดนามิกping ด้วยการกำหนดประเภทความสัมพันธ์ (type affinity) ทำให้คอลัมน์ยอมรับค่าได้เกือบทุกประเภทโดยไม่คำนึงถึงประเภทที่ประกาศไว้ หากต้องการบังคับใช้การตรวจสอบอย่างเข้มงวด ให้สร้างตารางเป็นตารางแบบ STRICT โดยเพิ่มเข้าไปใน SQLite 3.37.

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

ใช่. นักบิน GitHub แนะนำให้ใช้คำสั่ง ALTER TABLE, DROP TABLE และอื่นๆ SQLite ข้อความที่แทรกอยู่ในโปรแกรมแก้ไขข้อความ เช่น VS Codeโปรแกรมจะอ่านไฟล์การย้ายข้อมูลและคำสั่ง SQL ที่มีอยู่ของคุณ ดังนั้นคำแนะนำในการเติมคำจึงตรงกับชื่อตารางและชื่อคอลัมน์จริงของคุณ

สรุปโพสต์นี้ด้วย: