MySQL數據庫:使用mysql(Ubuntu)


MySQL數據庫:使用mysql(Ubuntu)

一、MySQL安裝
(一)安裝mysql服務端
<code>sudo apt-get install mysql-server
/<code>
(二)安裝圖形開發界面
<code>sudo apt-get install mysql-workbench
/<code>
(三)安裝mysql開發包
<code>sudo apt-get install libmysqlclient-dev
/<code>


更多c/c++ Linux服務器高階知識、電子書籍、視頻等等請後臺私信【架構】獲取

知識點有C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK等等。

MySQL數據庫:使用mysql(Ubuntu)

MySQL數據庫:使用mysql(Ubuntu)

二、API
(一)MYSQL

該結構代表1個數據庫連接的句柄。幾乎所有的MySQL函數均使用它。

(二)MYSQL_RES

該結構代表返回行的查詢結果(SELECT, SHOW, DESCRIBE,EXPLAIN)。

(三)MYSQL_ROW

這是1行數據的“類型安全”表示。它目前是按照計數字節字符串的數組實施的。(如果字段值可能包含二進制數據,不能將其當作由Null終結的字符串對待,這是因為這類值可能會包含Null字節)。行是通過調用mysql_fetch_row()獲得的。

(四)MYSQL_FIELD

該結構包含關於字段的信息,如字段名、類型和大小。通過重複調用mysql_fetch_field(),可為每個字段獲得MYSQL_FIELD結構。字段值不是該結構的組成部分,它們包含在MYSQL_ROW結構中。

(五)MYSQL_FIELD_OFFSET

這是MySQL字段列表偏移量的“類型安全”表示(由mysql_field_seek()使用)。偏移量是行內的字段編號,從0開始。

三、mysql常用API
(一)mysql_init()
  • 語法:
<code>MYSQL *mysql_init(MYSQL *mysql)
/<code>
  • 描述:
    分配或初始化與mysql_real_connect()相適應的MYSQL對象。如果mysql是NULL指針,該函數將分配、初始化、並返回新對象。否則,將初始化對象,並返回對象的地址。如果mysql_init()分配了新的對象,當調用mysql_close()來關閉連接時。將釋放該對象。
  • 返回值:

    初始化的MYSQL*句柄。如果有足夠內存以分配新的對象,返回NULL。
(二)mysql_real_connect()
  • 語法:
<code>MYSQL *mysql_real_connect(
MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag
)
/<code>
  • 描述:
    mysql_real_connect()嘗試與運行在主機上的MySQL數據庫引擎建立連接。在你能夠執行需要有效MySQL連接句柄結構的任何其他API函數之前,mysql_real_connect()必須成功完成。關閉連接。
    如果“port”不是0,其值將用作TCP/IP連接的端口號。
    如果unix_socket不是NULL,該字符串描述了應使用的套接字或命名管道。
    注意:“host”參數決定了連接的類型。client_flag的值通常為0。
  • 返回值:

    如果連接成功,返回MYSQL*連接句柄。如果連接失敗,返回NULL。對於成功的連接,返回值與第1個參數的值相同。
(三)mysql_real_query()
  • 語法:
<code>int mysql_real_query(
MYSQL *mysql,
const char *query,
unsigned long length
)
/<code>
  • 描述:
    執行由“query”指向的SQL查詢,它應是字符串長度字節“long”。
    正常情況下,字符串必須包含1條SQL語句,而且不應為語句添加終結分號(‘;’)或“\\g”。如果允許多語句執行,字符串可包含由分號隔開的多條語句。對於包含二進制數據的查詢,必須使用mysql_real_query()而不是mysql_query()。
  • 返回值:
    如果查詢成功,返回0。如果出現錯誤,返回非0值。
(四)mysql_store_result()
  • 語法:
<code>MYSQL_RES *mysql_store_result(MYSQL *mysql)
/<code>
  • 描述:
    對於成功檢索了數據的每個查詢(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必須調用mysql_store_result()或mysql_use_result() 。mysql_store_result()將查詢的全部結果讀取到客戶端,分配1個MYSQL_RES結構,並將結果置於該結構中。調用mysql_num_rows()可以找出結果集中的行數。可以調用mysql_fetch_row()來獲取結果集中的行,或調用mysql_row_seek()和mysql_row_tell()來獲取或設置結果集中的當前行位置。
  • 返回值:
    具有多個結果的MYSQL_RES結果集合。如果出現錯誤,返回NULL。
(五)mysql_use_result()
  • 語法:
<code>MYSQL_RES *mysql_use_result(MYSQL *mysql)
/<code>
  • 描述:
    mysql_use_result()將初始化結果集檢索,但並不像mysql_store_result()那樣將結果集實際讀取到客戶端。它必須通過對mysql_fetch_row()的調用,對每一行分別進行檢索。這將直接從服務器讀取結果,而不會將其保存在臨時表或本地緩衝區內,與mysql_store_result()相比,速度更快而且使用的內存也更少。使用mysql_use_result()時,必須執行mysql_fetch_row(),直至返回NULL值。
  • 返回值:
    具有多個結果的MYSQL_RES結果集合。如果出現錯誤,返回NULL。
(六)mysql_fetch_row()
  • 語法:
<code>MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
/<code>
  • 描述:
    檢索結果集的下一行。如果行中保存了調用mysql_fetch_row()返回的值,將按照row[0]到row[mysql_num_fields(result)-1],訪問這些值的指針。
  • 返回值:
    下一行的MYSQL_ROW結構。如果沒有更多要檢索的行或出現了錯誤,返回NULL。
(七)mysql_free_result()
  • 語法:
<code>void mysql_free_result(MYSQL_RES *result)
/<code>
  • 描述:
    釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為結果集分配的內存。完成對結果集的操作後,必須調用mysql_free_result()釋放結果集使用的內存。
  • 返回值:
    無 。
(八)mysql_error()
  • 語法:
<code>const char *mysql_error(MYSQL *mysql)
/<code>
  • 描述:
    對於由mysql指定的連接,對於失敗的最近調用的API函數,mysql_error()返回包含錯誤消息的、由Null終結的字符串

    如果成功,,所有向服務器請求信息的函數均會復位mysql_error()。
  • 返回值:
    返回描述錯誤的、由Null終結的字符串。如果未出現錯誤,返回空
    字符串。
(九)mysql_close()
  • 語法:
<code>void mysql_close(MYSQL *mysql)
/<code>
  • 描述:
    關閉前面打開的連接。如果句柄是由mysql_init()或mysql_connect()自動分配的,mysql_close()還將解除分配由mysql指向的連接句柄。
  • 返回值:
    無 。
四、一個簡單的C++程序
<code>#include <mysql>
#include <iostream>
using namespace std;
MYSQL *conn;MYSQL_RES *res;MYSQL_ROW row;
int main(int argc,char **argv)

{
const char *sever = "localhost"; //主機
const char *user = "root"; //用戶名
const char *password = "XXXXXX"; //用戶密碼
const char *database = "database_name"; //數據庫名稱
conn = mysql_init(NULL);
if(!mysql_real_connect(conn,sever,user,password,database,0,NULL,0))
{
cout << "connect error" << endl;
return 0;
}
mysql_set_character_set(conn,"utf8");
if(mysql_query(conn,"select * from emp"))
{
cout << "query error" << endl;
return 0;
}
//res = mysql_store_result(conn);
res = mysql_use_result(conn);
while((row = mysql_fetch_row(res)) != NULL)
{
cout << row[0] << '\\t' << row[1] << '\\t' << row[2] << '\\t'
<< row[3] << '\\t' << row[4] << endl;
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
/<iostream>/<mysql>/<code>

顯示結果:

MySQL數據庫:使用mysql(Ubuntu)

顯示結果.png



分享到:


相關文章: