Web 應用需持久化狀態、支持高併發、保證數據一致性。文本文件/自製迷你庫無法提供事務、並發控制、索引、備份恢復等企業級能力。成熟免費的 MySQL 讓開發者專注業務邏輯而非重造輪子。
mysqld 服務端 + 多語言客戶端 API
# 載入 Tcl Generic Database Interface (GDBI)
load /home/aroetter/tcl-sql/sql.so
set DBNAME "clientWebSite"
set TBLNAME "products"
set DBHOST "backend.company.com"
set DBUSER "mysqluser"
set DBPASSWD "abigsecret"
set targetPrice 200
# 連接
set handle [sql connect $DBHOST $DBUSER $DBPASSWD]
sql selectdb $handle $DBNAME
# 查詢
sql query $handle "select * from $TBLNAME where price < $targetPrice"
# 輸出 HTML 表頭
puts ""
puts "Product Id Description Price (\$) "
# 逐行獲取輸出
while {[set row [sql fetchrow $handle]] != ""} {
set prodid [lindex $row 0]
set descrip [lindex $row 1]
set price [lindex $row 2]
puts "$prodid $descrip $price "
}
puts "
"
# 清理
sql endquery $handle
sql disconnect $handle
#include
#include
#include
const char *DBNAME = "clientWebSite";
const char *DBTABLE = "products";
const char *DBHOST = "backend.company.com";
const char *DBUSER = "mysqluser";
const char *DBPASSWD = "abigsecret";
int main() {
try {
Connection con(DBNAME, DBHOST, DBUSER, DBPASSWD);
Query query = con.query();
query << "select * from " << DBTABLE;
Result res = query.store();
std::cout << "" << std::endl;
std::cout << "Product Id Description Price (\$) " << std::endl;
for (Result::iterator it = res.begin(); it != res.end(); ++it) {
Row row = *it;
std::cout << "" << row[0] << " " << row[1]
<< " " << row[2] << " " << std::endl;
}
std::cout << "
" << std::endl;
} catch (BadQuery &er) {
std::cerr << "SQL Error: " << er.error << std::endl; return -1;
} catch (BadConversion &er) {
std::cerr << "Conversion Error: " << er.data << " to " << er.type_name << std::endl; return -1;
}
return 0;
}
SELECT/INSERT/UPDATE/DELETE,拒絕 PROCESS/SHUTDOWN/FILE 等高危權限。mysqld 以無特權系統用戶(如 mysql)運行,而非 root。MySQL 以開源、高性能、多語言 API、插件式引擎成為 Linux Web 應用首選數據庫。開發中採用腳本語言快速迭代、核心熱點 C/C++ 重寫的混合模式,配合分層安全體系,可構建穩健高效的數據驅動應用。