MySQL:使用mysql(Ubuntu)

一、MySQL安裝

(一)安裝mysql服務端

sudo apt-get install mysql-server

(二)安裝圖形開發界面

sudo apt-get install mysql-workbench

(三)安裝mysql開發包

sudo apt-get install libmysqlclient-dev

二、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()

  • 語法:
MYSQL *mysql_init(MYSQL *mysql)
  • 描述:
    分配或初始化與mysql_real_connect()相適應的MYSQL對象。如果mysql是NULL指針,該函數將分配、初始化、并返回新對象。否則,將初始化對象,并返回對象的地址。如果mysql_init()分配了新的對象,當調用mysql_close()來關閉連接時。將釋放該對象。
  • 返回值:
    初始化的MYSQL*句柄。如果無足夠內存以分配新的對象,返回NULL。

(二)mysql_real_connect()

  • 語法:
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
)
  • 描述:
    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()

  • 語法:
int mysql_real_query(
MYSQL *mysql, 
const char *query, 
unsigned long length
)
  • 描述:
    執行由“query”指向的SQL查詢,它應是字符串長度字節“long”。
    正常情況下,字符串必須包含1條SQL語句,而且不應為語句添加終結分號(‘;’)或“\g”。如果允許多語句執行,字符串可包含由分號隔開的多條語句。對于包含二進制數據的查詢,必須使用mysql_real_query()而不是mysql_query()。
  • 返回值:
    如果查詢成功,返回0。如果出現錯誤,返回非0值。

(四)mysql_store_result()

  • 語法:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
  • 描述:
    對于成功檢索了數據的每個查詢(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()

  • 語法:
MYSQL_RES *mysql_use_result(MYSQL *mysql)
  • 描述:
    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()

  • 語法:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
  • 描述:
    檢索結果集的下一行。如果行中保存了調用mysql_fetch_row()返回的值,將按照row[0]到row[mysql_num_fields(result)-1],訪問這些值的指針。
  • 返回值:
    下一行的MYSQL_ROW結構。如果沒有更多要檢索的行或出現了錯誤,返回NULL。

(七)mysql_free_result()

  • 語法:
void mysql_free_result(MYSQL_RES *result)
  • 描述:
    釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為結果集分配的內存。完成對結果集的操作后,必須調用mysql_free_result()釋放結果集使用的內存。
  • 返回值:
    無 。

(八)mysql_error()

  • 語法:
const char *mysql_error(MYSQL *mysql)
  • 描述:
    對于由mysql指定的連接,對于失敗的最近調用的API函數,mysql_error()返回包含錯誤消息的、由Null終結的字符串
    如果成功,,所有向服務器請求信息的函數均會復位mysql_error()。
  • 返回值:
    返回描述錯誤的、由Null終結的字符串。如果未出現錯誤,返回空
    字符串。

(九)mysql_close()

  • 語法:
void mysql_close(MYSQL *mysql)
  • 描述:
    關閉前面打開的連接。如果句柄是由mysql_init()或mysql_connect()自動分配的,mysql_close()還將解除分配由mysql指向的連接句柄。
  • 返回值:
    無 。

四、一個簡單的C++程序

#include <mysql/mysql.h>
#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;
}

顯示結果:


顯示結果.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • 一、MySQL For Windows安裝: 1. 下載: 上官網下載即可: http://www.mysql.c...
    夕望有你閱讀 1,961評論 0 14
  • 數據庫操作代碼的基本流程 一、mysql接口函數相關 1>初始化一個mysql連接句柄,有了mysql句柄就可以對...
    賦閑閱讀 567評論 0 2
  • 什么是數據庫? 數據庫是存儲數據的集合的單獨的應用程序。每個數據庫具有一個或多個不同的API,用于創建,訪問,管理...
    chen_000閱讀 4,048評論 0 19
  • 1.MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。My...
    黃花菜已涼閱讀 4,587評論 3 60
  • 太多你的樣子, 刻成我回憶的模子。 墨綠的,嫩黃的,淺灰的, 你笑著的樣子,插腰站的樣子, 和著你美美的名字, 放...
    再七年我三十歲閱讀 5,317評論 4 11