Rumah  >  Artikel  >  pangkalan data  >  Pangkalan data MySQL dan bahasa Go: bagaimana untuk melaksanakan pertanyaan data?

Pangkalan data MySQL dan bahasa Go: bagaimana untuk melaksanakan pertanyaan data?

PHPz
PHPzasal
2023-06-17 08:37:021485semak imbas

Dengan pembangunan berterusan Internet dan teknologi pemprosesan data, pangkalan data memainkan peranan yang semakin penting sebagai alat teras untuk penyimpanan dan pengurusan data. Dalam pembangunan web moden, MySQL, sebagai salah satu pangkalan data hubungan yang paling banyak digunakan, sering digunakan untuk menyimpan dan mengurus data. Bahasa Go telah menjadi salah satu bahasa pengaturcaraan yang paling popular kerana kecekapan, kelajuan dan kesederhanaannya Ia juga mempunyai banyak perpustakaan dan rangka kerja yang sangat baik yang berkaitan dengan operasi pangkalan data. Jadi, bagaimana untuk melaksanakan pertanyaan data dalam pangkalan data MySQL dan bahasa Go? Artikel ini akan memperkenalkan perkara ini secara terperinci.

1. Asas bahasa Go

Pertama sekali, kita perlu menguasai beberapa pengetahuan asas bahasa Go. Bahasa Go menyediakan pangkalan data/pustaka standard sql, yang merupakan lapisan akses data ringan yang menyokong akses dan pengendalian pangkalan data SQL. Menggunakan pakej pangkalan data/sql, kami boleh melakukan operasi dengan mudah seperti sambungan pangkalan data, pertanyaan dan kemas kini.

Langkah asas untuk pertanyaan data menggunakan pangkalan data/pustaka standard sql dalam bahasa Go adalah seperti berikut:

  1. Buka sambungan pangkalan data

Dengan memanggil fungsi sql.Open Buat sambungan ke pangkalan data. Fungsi ini memerlukan dua parameter: nama pemacu dan nama sumber data. Dalam MySQL, nama pemacu ialah "mysql". Nama sumber data mengandungi semua maklumat yang diperlukan untuk menyambung ke pangkalan data, seperti alamat IP pangkalan data, port, nama pengguna, kata laluan, nama pangkalan data, dsb.

Kod sampel adalah seperti berikut:

import (
  "database/sql"
  _ "github.com/go-sql-driver/mysql"
)

func main() {
  db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/my_database")
  if err != nil {
    panic(err)
  }
  defer db.Close()
}
  1. Membina pernyataan pertanyaan SQL

Gunakan pernyataan pertanyaan SQL untuk menentukan operasi yang akan dilakukan. Dalam bahasa Go, anda boleh menggunakan ? sebagai pemegang tempat untuk menggantikan parameter dalam pertanyaan. Parameter ini secara automatik digantikan dengan nilai sebenar apabila melaksanakan pertanyaan, dengan itu menghalang serangan suntikan SQL.

Kod sampel adalah seperti berikut:

stmt, err := db.Prepare("SELECT * FROM users WHERE age > ?")
if err != nil {
  panic(err)
}
defer stmt.Close()
  1. Laksanakan operasi pertanyaan

Laksanakan pernyataan pertanyaan SQL dengan memanggil fungsi stmt.Query atau stmt. Fungsi QueryRow. Fungsi Pertanyaan mengembalikan objek set baris, yang boleh dilalui untuk mendapatkan set hasil. Fungsi QueryRow hanya mengembalikan satu baris set hasil.

Kod sampel adalah seperti berikut:

rows, err := stmt.Query(18)
if err != nil {
  panic(err)
}
defer rows.Close()

for rows.Next() {
  // 处理查询结果
}
  1. Menghuraikan hasil pertanyaan

Gunakan baris.Fungsi imbasan atau baris.Lajur berfungsi untuk memproses hasil pertanyaan. Fungsi Imbasan mendapat nilai baris semasa dan menyimpannya ke dalam pembolehubah tertentu, manakala fungsi Lajur mengembalikan nama lajur set hasil.

Kod sampel adalah seperti berikut:

var id int
var name string

err := rows.Scan(&id, &name)
if err != nil {
  panic(err)
}

2 Pengenalan kepada pernyataan MySQL

Setelah memahami pengetahuan asas bahasa Go, kita juga perlu menguasai sedikit pengetahuan tentang MySQL kenyataan. MySQL menyokong pelbagai pernyataan pertanyaan, seperti SELECT, INSERT, UPDATE, DELETE, dll. Dalam artikel ini, kami akan memperkenalkan pernyataan pertanyaan SELECT, yang merupakan salah satu pernyataan pertanyaan yang paling biasa digunakan dalam MySQL.

  1. PILIH pernyataan

PILIH penyataan digunakan untuk memilih data daripada satu atau lebih jadual dan mengembalikan keputusan yang ditetapkan kepada klien. Bentuk umum pernyataan SELECT adalah seperti berikut:

SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;

Antaranya, nama lajur mewakili nama lajur yang akan disoal, dipisahkan dengan koma nama jadual mewakili nama jadual yang akan disoal ; klausa WHERE adalah pilihan dan digunakan untuk Data Penapis.

Kod sampel adalah seperti berikut:

SELECT id, name, age FROM users WHERE age > 18;
  1. Pernyataan WHERE

Pernyataan WHERE digunakan untuk memilih data yang memenuhi syarat yang ditetapkan daripada jadual. Klausa WHERE boleh mengandungi satu atau lebih syarat, disambungkan oleh DAN atau ATAU. Keadaan biasanya ditakrifkan menggunakan operator perbandingan (seperti >, <, =, !=) dan operator logik (seperti AND atau OR).

Kod sampel adalah seperti berikut:

SELECT id, name, age FROM users WHERE age > 18 AND name LIKE '%john%';
  1. ORDER BY pernyataan

Pernyataan ORDER BY digunakan untuk mengisih keputusan yang ditetapkan mengikut satu atau lajur yang lebih khusus. Secara lalai, penyata ORDER BY diisih dalam tertib menaik.

Kod sampel adalah seperti berikut:

SELECT id, name, age FROM users WHERE age > 18 ORDER BY age DESC;
  1. PERNYATAAN LIMIT

Pernyataan LIMIT digunakan untuk mengehadkan bilangan baris yang dikembalikan dalam set hasil . Anda boleh menggunakan klausa OFFSET untuk menentukan tempat untuk mula kembali.

Kod sampel adalah seperti berikut:

SELECT id, name, age FROM users WHERE age > 18 LIMIT 5 OFFSET 10;

3 Gunakan bahasa Go untuk pertanyaan MySQL

  1. Pertanyakan hasil tunggal

Berikut ialah contoh Fungsi, digunakan untuk menanyakan pengguna dengan id 1:

func getUserByID(db *sql.DB) (User, error) {
  var user User
  err := db.QueryRow("SELECT id, name, age FROM users WHERE id = ?", 1).Scan(&user.ID, &user.Name, &user.Age)
  if err != nil {
    return User{}, err
  }
  return user, nil
}

Dalam fungsi contoh ini, kami menanyakan pengguna dengan id 1 dengan memanggil fungsi QueryRow. Fungsi QueryRow hanya mengembalikan satu baris daripada set hasil, jadi kita boleh menggunakan fungsi Imbas untuk menyimpan hasil ke dalam struktur Pengguna.

  1. Pertanyaan berbilang hasil

Berikut ialah contoh fungsi untuk menanyakan semua pengguna yang berumur lebih daripada 18 tahun:

func getUsersByAge(db *sql.DB, age int) ([]User, error) {
  var users []User
  rows, err := db.Query("SELECT id, name, age FROM users WHERE age > ?", age)
  if err != nil {
    return nil, err
  }
  defer rows.Close()

  for rows.Next() {
    var user User
    err := rows.Scan(&user.ID, &user.Name, &user.Age)
    if err != nil {
      return nil, err
    }
    users = append(users, user)
  }

  return users, nil
}

Dalam fungsi contoh ini, kami panggil fungsi Pertanyaan untuk menanyakan semua pengguna yang berumur lebih daripada 18 tahun, dan dapatkan semua hasil dengan merentasi set baris. Semasa kami mengulangi set baris, kami menyimpan hasilnya ke dalam struktur Pengguna melalui fungsi Imbas dan menambahkannya pada kepingan pengguna.

4. Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan bahasa Go untuk menanyakan data MySQL. Kami mula-mula memperkenalkan pengetahuan asas bahasa Go, kemudian menerangkan pernyataan pertanyaan yang biasa digunakan dalam MySQL, dan akhirnya menunjukkan cara menggunakan bahasa Go untuk melaksanakan pertanyaan MySQL melalui kod sampel.

Perlu diambil perhatian bahawa kod sampel di atas hanyalah operasi pertanyaan asas. Dalam pembangunan sebenar, kita perlu menggunakan pernyataan pertanyaan dan model aplikasi yang berbeza mengikut keperluan dan senario tertentu. Pada masa yang sama, prestasi pernyataan pertanyaan juga perlu dipertimbangkan. Kita harus cuba menggunakan kaedah pengoptimuman seperti indeks untuk meningkatkan prestasi pertanyaan.

Atas ialah kandungan terperinci Pangkalan data MySQL dan bahasa Go: bagaimana untuk melaksanakan pertanyaan data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn