Web 應用若需儲存大量狀態資訊 (如電子商務),成熟的關聯式資料庫不可或缺。MySQL 以快速、多執行緒、支援 ANSI SQL/ODBC、免費開源 (GPL) 成為 Linux 平台首選。本文概述 MySQL 架構、C API 與腳本語言整合方式,並提供 C++ 與 Tcl 簡易範例。
MYSQL *conn = mysql_init(NULL);
mysql_real_connect(conn, "localhost", "user", "pass", "db", 3306, NULL, 0);
mysql_query(conn, "SELECT * FROM products");
MYSQL_RES *res = mysql_store_result(conn);
while (MYSQL_ROW row = mysql_fetch_row(res)) {
// 處理 row[0], row[1]...
}
mysql_free_result(res);
mysql_close(conn);
Linux 發布版多預裝 Perl/Python,MySQL 驅動通常以 C API 為基底封裝:
mysqli 或 PDO_MySQL 擴充模組。DBD::mysql 配合 DBI。mysqlclient (C 綁定) 或 PyMySQL (純 Python)。mysqltcl 擴充套件。
package require mysqltcl
set db [mysqlconnect -host localhost -user user -password pass -db shop]
set res [mysqlsel $db "SELECT name, price FROM products WHERE price < 100"]
foreach row $res {
puts "Product: [lindex $row 0], Price: [lindex $row 1]"
}
mysqlclose $db
class MySQLDB {
MYSQL *conn;
public:
MySQLDB() : conn(mysql_init(nullptr)) {}
bool connect(const char* h, const char* u, const char* p, const char* d) {
return mysql_real_connect(conn, h, u, p, d, 3306, nullptr, 0);
}
bool query(const char* sql, std::vector>& out) {
if (mysql_query(conn, sql)) return false;
MYSQL_RES *res = mysql_store_result(conn);
int fields = mysql_num_fields(res);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
std::vector record;
for (int i=0; i
InnoDB 支援交易:START TRANSACTION / COMMIT / ROLLBACK。確保多步操作 (如扣款+扣庫存) 原子性。發生崩潰時透過 Redo/Undo Log 自動恢復一致性。
MySQL 在 Linux 上提供豐富的程式介面,從底層 C API 到高階腳本語言驅動皆成熟穩定。選擇適合專案技術棧的驅動,善用連線池、預處理陳述式與交易,即可構建高效能、可靠的資料存取層。