การย้ายโครงสร้างฐานข้อมูล
พัฒนาสคีมาให้เปลี่ยนแปลงต่อไป
การย้ายโครงสร้างฐานข้อมูล เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเชื่อมต่อฐานข้อมูล
- คำสั่งค้นหาที่ตรวจสอบขณะคอมไพล์
- การดำเนินการ CRUD
- การย้ายโครงสร้างฐานข้อมูล