本文目錄一覽:
用C語言如何對MySQL資料庫進行操作
有時為了性能,我們會直接用C語言來開發相關的模塊,尤其在我們的web應用中,雖然PHP、JSP等腳本均提供了MySQL的介面,但是顯然直接使用C語言具有更好的安全性和性能,Michael以前用PHP開發的多個項目中就使用了C語言編寫的這類介面,然後再編譯到php裡面,供php腳本直接使用,這方面的話題就不多說了,下面主要說一下在Linux下如何用C語言連接MySQL資料庫,並且讀取裡面的數據返回,同時如何進行編譯。if defined(_WIN32) || defined(_WIN64)為了支持windows平台上的編譯#includewindows.h#endif#includestdio.h#includestdlib.h#includemysql.h我的機器上該文件在/usr/local/include/mysql下定義MySQL資料庫操作的宏,也可以不定義留著後面直接寫進代碼defineSELECT_QUERYselectusernamefromtbb_userwhereuserid=%dintmain(intargc,char**argv)char**argv相當於char*argv[]{MYSQL mysql,*sock;定義資料庫連接的句柄,它被用於幾乎所有的MySQL函數MYSQL_RES *res;查詢結果集,結構類型MYSQL_FIELD *fd ;包含欄位信息的結構MYSQL_ROW row ;存放一行查詢結果的字元串數組char qbuf[160];存放查詢sql語句字元串if(argc!=2){//檢查輸入參數fprintf(stderr,usage:mysql_selectuserid\n\n);exit(1);}mysql_init(mysql);if(!(sock=mysql_real_connect(mysql,localhost,dbuser,dbpwd,9tmd_bbs_utf8,0,NULL,0))){fprintf(stderr,Couldn’tconnecttoengine!\n%s\n\n,mysql_error(mysql));perror();exit(1);}sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));if(mysql_query(sock,qbuf)){fprintf(stderr,Queryfailed(%s)\n,mysql_error(sock));exit(1);}if(!(res=mysql_store_result(sock))){fprintf(stderr,Couldn’tgetresultfrom%s\n,mysql_error(sock));exit(1);}printf(numberoffieldsreturned:%d\n,mysql_num_fields(res));while(row=mysql_fetch_row(res)){printf(Theruserid#%d’susernameis:%s\n,atoi(argv[1]),(((row[0]==NULL)(!strlen(row[0])))?NULL:row[0]));puts(queryok!\n);}mysql_free_result(res);mysql_close(sock);exit(0);return0;為了兼容大部分的編譯器加入此行}編譯的時候,使用下面的命令gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 後面兩個選項可選,根據您的環境情況運行的時候,執行下面的命令./mysql_select 1將返回如下結果:numberoffieldsreturned:1Theruserid#1’susernameis:Michaelqueryok!上面的代碼我想大部分都能看明白,不明白的可以參考一下MySQL提供的有關C語言API部分文檔源碼天空,各個函數都有詳細說明,有時間我整理一份常用的API說明出來。
mysql 系統函數類型有哪些
1、數學函數
2、聚合函數(常用於GROUP BY從句的SELECT查詢中)、
3、字元串函數
4、日期和時間函數
5、加密函數
6、控制流函數
7、格式化函數
8、類型轉化函數
9、系統信息函數
以上就是mysql 中常用的一些函數類型,如果不清楚具體的用法,可以參照相關教程,比如:
MySQL常用函數2——聚集函數
運行在行組上,計算和返回單個值的函數。
AVG() 通過對表中行數計數並計算特定列值之和,求得該列的平均值。 AVG() 可用來返回所有列的平均值,也可以用來返回特定列或行的平均值。
COUNT() 函數進行計數。可利用 COUNT() 確定表中行的數目或符合特定條件的行的數目。
MAX() 返回指定列中的最大值, MAX() 要求指定列名。
返回指定列的最小值,要求指定列名。
用來返回指定列值的和(總計)。
以上提到的聚集函數都可以如下使用:
mysql中常用的聚合函數有哪些?
一、AVG
AVG(col):返回指定列的平均值
二、COUNT
COUNT(col):返回指定列中非NULL值的個數
三、MIN/MAX
MIN(col):返回指定列的最小值
MAX(col):返回指定列的最大值
四、SUM
SUM(col):返回指定列的所有值之和
五、GROUP_CONCAT
GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name …]]
[SEPARATOR str_val])
返回由屬於一組的列值連接組合而成的結果
擴展資料
增加新用戶
(注意:和上面不同,下面的因為是 MySQL 環境中的命令,所以後面都帶一個分號作為命令結束符)
格式:grant select on 資料庫.* to 用戶名@登錄主機 identified by 「密碼」
例1、增加一個用戶 test1 密碼為 abc,讓他可以在任何主機上登錄,並對所有資料庫有查詢、插入、修改、刪除的許可權。首先用以 root 用戶連入 MySQL,然後鍵入以下命令:
grant select,insert,update,delete on *.* to test1@「%」 Identified by 「abc」;
但例1增加的用戶是十分危險的,你想如某個人知道test1的密碼,那麼他就可以在internet上的任何一台電腦上登錄你的mysql資料庫並對你的數據可以為所欲為了,解決辦法見例2。
例2、增加一個用戶 test2 密碼為 abc,讓他只可以在 localhost 上登錄,並可以對資料庫 mydb 進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MYSQL資料庫所在的那台主機),這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問資料庫,只能通過MYSQL主機上的web頁來訪問了。
grant select, insert, update, delete on mydb.* to test2@localhost identified by 「abc」;
如果你不想 test2 有密碼,可以再打一個命令將密碼消掉。
grant select, insert, update, delete on mydb.* to test2@localhost identified by 「」;
下面來看看 MySQL 中有關資料庫方面的操作。注意:必須首先登錄到 MySQL 中,以下操作都是在 MySQL 的提示符下進行的,而且每個命令以分號結束。
直觀理解:MySQL常用窗口函數
窗口函數(window functions),也叫分析函數和OLAP函數,MySQL在8.0之後開始支持窗口函數。窗口函數可以用來對數據進行實時分析處理,和group by有類似之處,其區別在於窗口會對每個分組之後的數據按行進行分別操作,而group by一般對分組之後的函數使用聚合函數匯總,做不到對不同的group中的行數據進行分別操作。這就簡單介紹幾種常見的MySQL窗口函數。下表中列出了幾種常見的窗口函數,並對其基本功能進行了描述。接下來我們會以一段示例,來展示MySQL中窗口函數的用途和效果。
假設我們存在一張如下的員工工資表,接下來我們將以這張表對窗口函數的使用方法進行簡單的演示。
窗口函數的語法如下,所有的窗口函數均遵循以下語法:
其中 frame_clause 語法如下。
接下來我們將展示一些場景的窗口函數的用法和效果。
示例: 對所有員工按照薪資降序排序,並給出對應的row_number、rank和dense_rank的排名
示例: 對每個部門的員工按照薪資降序排序,並給出對應的row_number、rank和dense_rank的排名
示例: 對所有員工按照薪資降序排序,並給出對應的row_number、rank和dense_rank的排名,最終結果按照員工號進行排序輸出。
示例: 找出每個部門工資最高的人。
示例: a.將所有員工按照工資遞增的順序分成4組。b.根據員工入職日期升序分成7組。
示例: 獲取每個部門,按工資從低到高得累計和。
示例: 獲取每個部門得工資累計和。
示例: 獲取整個公司的薪資按照薪資遞增的累計和。
示例: 獲取整個公司的薪資按照薪資遞增的前兩行和後一行範圍內的薪資和。
示例: 每個部門的平均工資。
示例: 獲取整個公司的薪資按照薪資遞增的前兩行和後一行範圍內的薪資平均值。
示例: 根據薪資排序,獲取CUME_DIST()和PERCENT_RANK()
示例: a. 獲取每個人入職前一行的數據,默認值為”2021-01-01″;b. 獲取每個人入職前兩行的數據,不設置默認值;c. 獲取每個人入職後一行的數據,默認值為”2022-01-01″;d. 獲取每個人入職後兩行的數據,不設置默認值;
示例: a. 按照入職日期順序排序,找出當前每個部門最先入職的人的薪資。b. 按照入職日期順序排序,找出當前每個部門最後入職的人的薪資。
示例: a.獲取截至當前工資第二高的人的工資。b.獲取第二個入職的人的工資。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247648.html