MySQL是一種流行的開源數據庫管理系統,它提供了多種客戶端用于與數據庫進行交互。其中,C客戶端被廣泛使用在各種應用程序中,但是隨著應用程序數據量增加,常常需要一次性進行大量查詢,此時就需要使用批量查詢。
批量查詢是一種將多個查詢語句組合在一起,通過一次性提交給數據庫服務器進行處理的技術。在C客戶端中,可以通過調用mysql_query()函數來執行查詢語句,但是每次調用只能執行一條語句,如果需要執行多個查詢語句,就需要使用mysql_multi_query()函數。
mysql_multi_query()函數的原型如下:
int mysql_multi_query(MYSQL *mysql, const char *stmt_str);
其中,mysql參數指向一個已經連接的MySQL對象,stmt_str參數是一個以"\0"結尾的多條SQL語句字符串,語句之間使用";"分隔。
當mysql_multi_query()函數執行成功后,它將返回0,否則返回非0值表示失敗。此時,可以使用mysql_store_result()函數依次獲取每個查詢結果。
以下是一個示例程序,展示了如何使用mysql_multi_query()函數執行兩個查詢語句并獲取結果:
#include<stdio.h> #include<mysql.h> int main() { MYSQL *mysql = mysql_init(NULL); if(!mysql_real_connect(mysql, "localhost", "root", "password", NULL, 0, NULL, 0)) { printf("Connection failed: %s\n", mysql_error(mysql)); return 1; } const char *sql = "SELECT * FROM table1; SELECT * FROM table2;"; if(mysql_multi_query(mysql, sql)) { printf("Query failed: %s\n", mysql_error(mysql)); return 1; } MYSQL_RES *res = NULL; int i = 1; do { printf("Result %d:\n", i++); res = mysql_store_result(mysql); if(res) { MYSQL_ROW row; while((row = mysql_fetch_row(res))) { printf("%s %s %s\n", row[0], row[1], row[2]); } } else { printf("%s\n", mysql_error(mysql)); } mysql_free_result(res); } while(!mysql_next_result(mysql)); mysql_close(mysql); return 0; }
需要注意的是,mysql_multi_query()函數執行的語句必須是可重復執行的,比如SELECT語句、SHOW語句等,而不能包含不能重復執行的語句,比如ALTER、CREATE、DROP等。