Go-তে Database CRUD Operations (ক্রুড অপারেশনস)
CRUD এর পূর্ণরূপ হচ্ছে Create, Read, Update, Delete, যা ডেটাবেসের সাধারণ অপারেশনসমূহ। Go তে database অপারেশন করতে আমরা বিভিন্ন লাইব্রেরি ব্যবহার করতে পারি, তবে সবচেয়ে সাধারণ লাইব্রেরি হল database/sql প্যাকেজ। এটি Go-তে ডেটাবেস অপারেশন করার জন্য একটি বেসিক ইন্টারফেস প্রদান করে, এবং আপনি এর সাথে বিভিন্ন ড্রাইভার (যেমন PostgreSQL, MySQL, SQLite) ব্যবহার করতে পারেন।
এখানে, আমরা MySQL ডেটাবেসের সাথে CRUD অপারেশন দেখাবো। আপনি যদি অন্য কোন ডেটাবেস (যেমন PostgreSQL) ব্যবহার করেন, তাহলে শুধুমাত্র ড্রাইভার পরিবর্তন করতে হবে।
১. Go তে MySQL ডেটাবেস সংযোগ করা
প্রথমে, আপনাকে github.com/go-sql-driver/mysql ড্রাইভার ইনস্টল করতে হবে:
go get -u github.com/go-sql-driver/mysqlএটা ডেটাবেসের সাথে যোগাযোগের জন্য MySQL ড্রাইভার হিসেবে কাজ করবে।
২. Create Operation (ডেটা তৈরি করা)
CREATE অপারেশন দিয়ে নতুন ডেটা ডেটাবেসে যুক্ত করা হয়।
২.১ Create Operation Example
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL ডেটাবেসে সংযোগ
db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/testdb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// ডেটা INSERT করা
query := "INSERT INTO users (name, age) VALUES (?, ?)"
_, err = db.Exec(query, "John Doe", 30)
if err != nil {
log.Fatal(err)
}
fmt.Println("Data inserted successfully!")
}এখানে:
sql.Open: ডেটাবেসে সংযোগ তৈরি করা হয়।db.Exec:INSERT INTOকোয়েরি দিয়ে ডেটাবেসে ডেটা যুক্ত করা হয়।
৩. Read Operation (ডেটা পড়া)
SELECT অপারেশন দিয়ে ডেটাবেস থেকে ডেটা পড়া হয়।
৩.১ Read Operation Example
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL ডেটাবেসে সংযোগ
db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/testdb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// ডেটা SELECT করা
query := "SELECT id, name, age FROM users"
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// রিটার্ন করা ডেটা প্রিন্ট করা
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%d: %s, %d\n", id, name, age)
}
// কোনো ত্রুটি হলে চেক করা
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}এখানে:
db.Query: ডেটাবেস থেকে ডেটা নির্বাচন (SELECT) করে।rows.Scan: প্রতিটি রেকর্ডের মান স্ক্যান করে এবং ভেরিয়েবলগুলিতে রাখে।
৪. Update Operation (ডেটা আপডেট করা)
UPDATE অপারেশন দিয়ে ডেটাবেসে থাকা ডেটার মান পরিবর্তন করা হয়।
৪.১ Update Operation Example
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL ডেটাবেসে সংযোগ
db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/testdb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// ডেটা আপডেট করা
query := "UPDATE users SET age = ? WHERE name = ?"
_, err = db.Exec(query, 35, "John Doe")
if err != nil {
log.Fatal(err)
}
fmt.Println("Data updated successfully!")
}এখানে:
db.Exec:UPDATEকোয়েরি দিয়ে ডেটা আপডেট করা হয়েছে।
৫. Delete Operation (ডেটা মুছে ফেলা)
DELETE অপারেশন দিয়ে ডেটাবেস থেকে ডেটা মুছে ফেলা হয়।
৫.১ Delete Operation Example
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL ডেটাবেসে সংযোগ
db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/testdb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// ডেটা ডিলিট করা
query := "DELETE FROM users WHERE name = ?"
_, err = db.Exec(query, "John Doe")
if err != nil {
log.Fatal(err)
}
fmt.Println("Data deleted successfully!")
}এখানে:
db.Exec:DELETEকোয়েরি দিয়ে ডেটা মুছে ফেলা হয়েছে।
৬. Transaction Management (ট্রানজেকশন ম্যানেজমেন্ট)
ডেটাবেসে একাধিক অপারেশন একসাথে একটি ইউনিট হিসেবে সম্পন্ন করার জন্য Transaction ব্যবহার করা হয়। এটি আপনাকে যদি একটি অপারেশন ব্যর্থ হয়, তাহলে পুরো ট্রানজেকশনটি ফিরিয়ে আনতে সহায়তা করে (rollback)।
৬.১ Transaction Example
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL ডেটাবেসে সংযোগ
db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/testdb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Transaction শুরু
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
// প্রথম অপারেশন (insert)
_, err = tx.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "Alice", 28)
if err != nil {
tx.Rollback() // কোনো সমস্যা হলে rollback
log.Fatal(err)
}
// দ্বিতীয় অপারেশন (insert)
_, err = tx.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "Bob", 30)
if err != nil {
tx.Rollback() // কোনো সমস্যা হলে rollback
log.Fatal(err)
}
// যদি সবকিছু ঠিক থাকে, তাহলে commit
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
fmt.Println("Transaction completed successfully!")
}এখানে:
db.Begin(): ট্রানজেকশন শুরু করা।tx.Rollback(): যদি কোনো অপারেশন ব্যর্থ হয়, তাহলে সবকিছু ফিরে আনা।tx.Commit(): সব অপারেশন সফল হলে ট্রানজেকশন কমিট করা।
সারসংক্ষেপ
- Create: ডেটাবেসে নতুন ডেটা যোগ করা (
INSERTকোয়েরি ব্যবহার করে)। - Read: ডেটাবেস থেকে ডেটা পড়া (
SELECTকোয়েরি ব্যবহার করে)। - Update: ডেটাবেসে বিদ্যমান ডেটা আপডেট করা (
UPDATEকোয়েরি ব্যবহার করে)। - Delete: ডেটাবেস থেকে ডেটা মুছে ফেলা (
DELETEকোয়েরি ব্যবহার করে)। - Transaction: একাধিক অপারেশন একসাথে পরিচালনা করা এবং ব্যর্থ হলে সবকিছু ফিরিয়ে আনা (
BEGIN,COMMIT,ROLLBACKব্যবহার করে)।
Go-তে database CRUD operations খুবই শক্তিশালী এবং আপনি সহজেই ডেটাবেসের সাথে কাজ করতে পারবেন database/sql প্যাকেজের মাধ্যমে।
Read more