Lua - Truy cập Cơ sở Dữ liệu
Xin chào, các bạn đang học lập trình! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới truy cập cơ sở dữ liệu bằng Lua. Là người giáo viên khoa học máy tính gần gũi của bạn, tôi ở đây để hướng dẫn bạn qua cuộc phiêu lưu này từng bước một. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ cơ bản và dần dần nâng cao. Vậy, hãy mang theo mũ bảo hộ ảo của bạn, và chúng ta cùng nhau đào sâu vào dữ liệu!
Thiết lập MySQL db
Trước khi chúng ta có thể bắt đầu chơi với cơ sở dữ liệu trong Lua, chúng ta cần chuẩn bị sân chơi của mình. Hãy tưởng tượng như đang chuẩn bị bếp trước khi nấu một bữa ăn ngon. Trong trường hợp của chúng ta, chúng ta sẽ sử dụng MySQL làm hệ thống quản lý cơ sở dữ liệu.
-
Đầu tiên, hãy chắc chắn rằng bạn đã cài đặt MySQL trên máy tính của bạn. Nếu chưa, hãy truy cập trang web MySQL và tải xuống phiên bản phù hợp với hệ điều hành của bạn.
-
Sau khi cài đặt, tạo một cơ sở dữ liệu mới cho các thí nghiệm của chúng ta. Bạn có thể làm điều này bằng cách sử dụng dòng lệnh MySQL hoặc một công cụ đồ họa như MySQL Workbench.
CREATE DATABASE lua_test;
Tuyệt vời! Bây giờ chúng ta đã sẵn sàng để thực hiện phép màu Lua.
Nhập MySQL
Để sử dụng MySQL với Lua, chúng ta cần một công cụ đặc biệt叫做 LuaSQL. Nó giống như một người dịch giúp Lua giao tiếp với MySQL. Hãy nhập nó:
local luasql = require "luasql.mysql"
Dòng này giống như nói với Lua, "Hey, chúng ta sẽ cần kỹ năng MySQL của bạn cho nhiệm vụ này!"
Thiết lập Kết nối
Bây giờ chúng ta đã giới thiệu Lua với MySQL, hãy thiết lập kết nối. Điều này giống như đang gọi điện thoại để kết nối với cơ sở dữ liệu của chúng ta:
local env = luasql.mysql()
local con = env:connect("lua_test", "username", "password", "localhost", 3306)
Đây là những gì đang xảy ra:
- Chúng ta tạo một môi trường (
env
) cho MySQL. - Chúng ta sử dụng môi trường này để kết nối với cơ sở dữ liệu của chúng ta, cung cấp tên cơ sở dữ liệu, tên người dùng, mật khẩu, máy chủ và cổng.
Hàm Thực hiện
Hàm execute
là cách của chúng ta để gửi lệnh đến cơ sở dữ liệu. Nó giống như một nhân viên phục vụ nhận đơn hàng của chúng ta tại một nhà hàng:
function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end
Hàm này nhận kết nối và lệnh SQL, thực hiện nó và trả về kết quả.
Ví dụ Tạo Bảng
Hãy tạo bảng đầu tiên của chúng ta! Hãy tưởng tượng chúng ta đang xây dựng một hệ thống thư viện đơn giản:
local sql = [[
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
author VARCHAR(50),
year INT
)
]]
execute(con, sql)
Điều này tạo ra một bảng có tên 'books' với các cột id, title, author và year.
Ví dụ Lệnh Insert
Bây giờ, hãy thêm một số sách vào thư viện của chúng ta:
local sql = [[
INSERT INTO books (title, author, year)
VALUES ('The Lua Programming Language', 'Roberto Ierusalimschy', 2016)
]]
execute(con, sql)
Điều này thêm một sách vào bảng. Nó giống như điền một thẻ thư viện cho một sách mới.
Ví dụ Lệnh Update
Oops! Chúng ta đã phạm sai lầm. Hãy cập nhật năm xuất bản của sách của chúng ta:
local sql = [[
UPDATE books
SET year = 2017
WHERE title = 'The Lua Programming Language'
]]
execute(con, sql)
Điều này sửa đổi năm xuất bản của sách của chúng ta.
Ví dụ Lệnh Delete
Hãy xóa một sách khỏi thư viện của chúng ta:
local sql = [[
DELETE FROM books
WHERE title = 'The Lua Programming Language'
]]
execute(con, sql)
Điều này xóa sách đã chỉ định khỏi bảng.
Ví dụ Lệnh Select
Bây giờ, hãy xem chúng ta có những sách nào trong thư viện của mình:
local sql = "SELECT * FROM books"
local cur = con:execute(sql)
local row = cur:fetch({}, "a")
while row do
print(string.format("%s by %s (%d)", row.title, row.author, row.year))
row = cur:fetch(row, "a")
end
Điều này lấy tất cả các sách và in chi tiết của chúng.
Ví dụ Hoàn chỉnh
Hãy kết hợp tất cả lại trong một ví dụ hoàn chỉnh:
local luasql = require "luasql.mysql"
local env = luasql.mysql()
local con = env:connect("lua_test", "username", "password", "localhost", 3306)
function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end
-- Tạo bảng
execute(con, [[
CREATE TABLE IF NOT EXISTS books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
author VARCHAR(50),
year INT
)
]])
-- Chèn một sách
execute(con, [[
INSERT INTO books (title, author, year)
VALUES ('The Lua Programming Language', 'Roberto Ierusalimschy', 2017)
]])
-- Lấy và in tất cả các sách
local cur = con:execute("SELECT * FROM books")
local row = cur:fetch({}, "a")
while row do
print(string.format("%s by %s (%d)", row.title, row.author, row.year))
row = cur:fetch(row, "a")
end
con:close()
env:close()
Sketch này tạo ra một bảng, chèn một sách và sau đó in tất cả các sách trong bảng.
Thực hiện Giao dịch
Giao dịch giống như những quả bóng bảo vệ xung quanh một loạt các thao tác cơ sở dữ liệu. Chúng đảm bảo rằng hoặc tất cả các thao tác thành công, hoặc không có thao tác nào thành công. Đó là như một cách tiếp cận "tất cả hoặc không có gì".
Bắt đầu Giao dịch
Để bắt đầu một giao dịch:
con:execute("START TRANSACTION")
Gọi lại Giao dịch
Nếu có điều gì đó sai sót, chúng ta có thể đảo ngược tất cả các thay đổi:
con:execute("ROLLBACK")
Chấp nhận Giao dịch
Nếu mọi thứ diễn ra tốt đẹp, chúng ta có thể lưu tất cả các thay đổi:
con:execute("COMMIT")
Nhập SQLite
SQLite là một hệ thống cơ sở dữ liệu phổ biến khác, đặc biệt là cho các ứng dụng nhỏ hơn. Hãy xem cách sử dụng nó với Lua:
local luasql = require "luasql.sqlite3"
Thiết lập Kết nối
Kết nối với SQLite hơi khác so với MySQL:
local env = luasql.sqlite3()
local con = env:connect("test.db")
Điều này tạo hoặc mở một tệp có tên "test.db" làm cơ sở dữ liệu của chúng ta.
Hàm Thực hiện
Hàm execute
cho SQLite tương tự như MySQL:
function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end
Ví dụ Tạo Bảng
Hãy tạo một bảng đơn giản trong SQLite:
local sql = [[
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
]]
execute(con, sql)
Ví dụ Lệnh Insert
Bây giờ, hãy thêm một người dùng:
local sql = [[
INSERT INTO users (name, age)
VALUES ('Alice', 30)
]]
execute(con, sql)
Ví dụ Lệnh Select
Hãy lấy tất cả người dùng:
local sql = "SELECT * FROM users"
local cur = con:execute(sql)
local row = cur:fetch({}, "a")
while row do
print(string.format("%s is %d years old", row.name, row.age))
row = cur:fetch(row, "a")
end
Ví dụ Hoàn chỉnh
Dưới đây là một ví dụ hoàn chỉnh sử dụng SQLite:
local luasql = require "luasql.sqlite3"
local env = luasql.sqlite3()
local con = env:connect("test.db")
function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end
-- Tạo bảng
execute(con, [[
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
]])
-- Chèn một người dùng
execute(con, [[
INSERT INTO users (name, age)
VALUES ('Alice', 30)
]])
-- Lấy và in tất cả người dùng
local cur = con:execute("SELECT * FROM users")
local row = cur:fetch({}, "a")
while row do
print(string.format("%s is %d years old", row.name, row.age))
row = cur:fetch(row, "a")
end
con:close()
env:close()
Sketch này tạo ra một bảng, chèn một người dùng và sau đó in tất cả người dùng trong bảng.
Và thế là xong, các bạn! Bạn đã chính thức bước những bước đầu tiên vào thế giới truy cập cơ sở dữ liệu bằng Lua. Hãy nhớ rằng, thực hành là cách tốt nhất để trở thành người thợ giỏi, vì vậy đừng ngần ngại thử nghiệm với các ví dụ này. Ai biết đâu, bạn có thể tạo ra ứng dụng cơ sở dữ liệu驱动的 lớn tiếp theo! Hãy mã hóa vui vẻ!
Phương pháp | Mô tả |
---|---|
require "luasql.mysql" |
Nhập module MySQL |
env:connect() |
Thiết lập kết nối cơ sở dữ liệu |
con:execute() |
Thực hiện lệnh SQL |
cur:fetch() |
Lấy kết quả hàng |
START TRANSACTION |
Bắt đầu giao dịch |
ROLLBACK |
Đảo ngược giao dịch |
COMMIT |
Chấp nhận giao dịch |
require "luasql.sqlite3" |
Nhập module SQLite |
Credits: Image by storyset