0Pricing
Learn Rust Coding · บทเรียน

การย้ายโครงสร้างฐานข้อมูล

พัฒนาสคีมาให้เปลี่ยนแปลงต่อไป

การย้ายโครงสร้างฐานข้อมูล เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

ทำไมจึงต้องมีการย้ายโครงสร้าง

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

  • ติดตามด้วยระบบควบคุมเวอร์ชัน
  • นำไปใช้ตามลำดับและเพียงครั้งเดียวอย่างแน่นอน

เครื่องมือ sqlx-cli

sqlx มี CLI สำหรับจัดการการย้ายโครงสร้าง ติดตั้งครั้งเดียวด้วย cargo

cargo install sqlx-cli --no-default-features --features postgres

การสร้างการย้ายโครงสร้าง

sqlx migrate add จะสร้างไฟล์ SQL ที่มีประทับเวลาในโฟลเดอร์ migrations/ ประทับเวลาจะกำหนดลำดับ

sqlx migrate add create_users

การเขียน SQL สำหรับการย้ายโครงสร้าง

ไฟล์การย้ายโครงสร้างแต่ละไฟล์จะมี SQL สำหรับปรับโครงสร้างฐานข้อมูลไปข้างหน้า ควรเก็บการเปลี่ยนแปลงเชิงตรรกะหนึ่งรายการต่อหนึ่งไฟล์

CREATE TABLE users (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT
);

การเรียกใช้การย้ายโครงสร้าง

sqlx migrate run จะนำการย้ายโครงสร้างที่รอดำเนินการทั้งหมดไปใช้กับ DATABASE_URL และบันทึกแต่ละรายการไว้ในตารางติดตาม

sqlx migrate run

ตารางติดตาม

sqlx จะบันทึกการย้ายโครงสร้างที่นำไปใช้แล้วใน _sqlx_migrations โดยเก็บเวอร์ชันและผลรวมตรวจสอบไว้ เพื่อไม่ให้นำรายการเดิมไปใช้ซ้ำหรือเปลี่ยนแปลงโดยไม่แจ้ง

การย้ายโครงสร้างที่ย้อนกลับได้

เพิ่มแฟล็ก -r เพื่อแยกไฟล์ขาขึ้นและขาลง ทำให้ย้อนกลับได้ sqlx migrate revert จะเรียกใช้ไฟล์ขาลงล่าสุด

sqlx migrate add -r create_posts

การจำลองการติดตามการย้ายโครงสร้าง

ตัวเรียกใช้การย้ายโครงสร้างจะนำไปใช้เฉพาะเวอร์ชันที่ใหม่กว่าเวอร์ชันที่นำไปใช้ล่าสุด ตัวอย่างที่รันได้นี้จำลองการตัดสินใจดังกล่าว

fn pending(all: &[u32], applied: u32) -> Vec<u32> {
    all.iter().cloned().filter(|v| *v > applied).collect()
}

fn main() {
    let migrations = [1, 2, 3, 4];
    let last_applied = 2;
    println!("{:?}", pending(&migrations, last_applied));
}

การฝังการย้ายโครงสร้างในไบนารี

มาโคร migrate! จะฝังโฟลเดอร์การย้ายโครงสร้างไว้ในไบนารี เพื่อให้ app นำไปใช้ได้เมื่อเริ่มต้นโปรแกรม โดยไม่ต้องใช้ CLI ในระบบจริง

use sqlx::{Pool, Postgres};

async fn migrate(pool: &Pool<Postgres>) {
    sqlx::migrate!("./migrations")
        .run(pool)
        .await
        .unwrap();
}

ผลรวมตรวจสอบและการไม่เปลี่ยนแปลง

อย่าแก้ไขการย้ายโครงสร้างที่เคยเรียกใช้แล้ว sqlx จะเก็บผลรวมตรวจสอบไว้ และปฏิเสธการทำงานหากเนื้อหาของการย้ายโครงสร้างเดิมเปลี่ยนแปลง ให้เพิ่มการย้ายโครงสร้างรายการใหม่แทน

SQL แบบทำซ้ำได้อย่างปลอดภัย

ป้องกันคำสั่งด้วย IF NOT EXISTS เพื่อให้การเรียกใช้ซ้ำในสภาพแวดล้อมใหม่ปลอดภัยและคาดเดาได้

CREATE TABLE IF NOT EXISTS tags (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL UNIQUE
);

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับการย้ายโครงสร้าง

สรุปทบทวน

คุณได้เรียนรู้การย้ายโครงสร้างฐานข้อมูล:

  • การย้ายโครงสร้างคือการเปลี่ยนแปลงโครงสร้างฐานข้อมูลที่เรียงลำดับและมีเวอร์ชัน
  • sqlx migrate add/run/revert ใช้จัดการการย้ายโครงสร้าง
  • เวอร์ชันที่นำไปใช้แล้วและผลรวมตรวจสอบจะอยู่ใน _sqlx_migrations
  • migrate! จะฝังการย้ายโครงสร้างไว้เพื่อใช้เมื่อเริ่มต้นโปรแกรม
  • อย่าแก้ไขการย้ายโครงสร้างที่นำไปใช้แล้ว ให้เพิ่มรายการใหม่แทน

หลักสูตร sqlx เสร็จสมบูรณ์แล้ว

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

บทเรียน “การย้ายโครงสร้างฐานข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การย้ายโครงสร้างฐานข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การย้ายโครงสร้างฐานข้อมูล”

พัฒนาสคีมาให้เปลี่ยนแปลงต่อไป คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การย้ายโครงสร้างฐานข้อมูล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม

ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเชื่อมต่อฐานข้อมูล
  2. คำสั่งค้นหาที่ตรวจสอบขณะคอมไพล์
  3. การดำเนินการ CRUD
  4. การย้ายโครงสร้างฐานข้อมูล
← กลับไปที่ Learn Rust Coding