【啓動mysql服務】
Service mysql start
【啓動mysql登陸】
mysql -u root –p
添加一個用戶
Create database db1 character set utf8;
grant all on db1.* to dbuser1 identified by 'dbuser1';//將db1下的所有數據授權給dbuser1,密碼爲dbuser1
用該用戶登陸
mysql -u dbuser1 –p
在頭文件目錄裏沒有mysql.h頭文件
ubuntu下:audo apt-get install libmysqlclient-dev
centos下 : yum install mysql-devel
頭文件的名字是以/usr/include爲基路徑,往後加上所在<路徑名/文件名.h>
如#include<sys/stat.h>
Makefile文件中連接時加上-mysqlclient 意思是要連接到libmysqlclient.so這個庫
Mysql的client與server也是TCP協議
1, 初始化client
2, 建立連接
3, 接收和交互
數據庫操作步驟與函數:
1,
MYSQL mysql;
//初始化mysql對象,相當於初始化了一個TCP的socket對象,同時初始化sql的內存和一些結構
mysql_init(&mysql);
2,
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 int client_flag)
• 第一個參數應該是一個現存MYSQL結構的地址。在調用mysql_real_connect()之前,你必須調用mysql_init()初始化MYSQL結構。見下面的例子。
• host值可以是一個主機名或一個IP地址。如果host是NULL或字符串"localhost",假定是到本地主機的一個連接。如果OS支持套接字(Unix)或命名管道(Win32),使用他們而不是TCP/IP與服務器連接。
• user參數包含用戶的MySQL登錄ID。如果user是NULL,假定是當前用戶。在Unix下,它是當前登錄名。在Windows ODBC下,必須明確地指定當前用戶名字。見16.4 怎樣填寫ODBC管理程序中各種域。
• passwd參數爲user包含口令。如果passwd是NULL,只有在user表中對於有一個空白口令字段的用戶的條目將被檢查一個匹配。這允許數據庫主管設置MySQL權限,使用戶獲得不同的口令,取決於他們是否已經指定一個口令。注意:不要試圖在調用mysql_real_connect()前加密口令;口令加密自動被客戶API處理。
• db是數據庫名。如果db不是NULL,連接將缺省數據庫設置爲這個值。
• 如果port不是0,值對於TCP/IP連接將用作端口號。注意host參數決定連接的類型。
• 如果unix_socket不是NULL,字符串指定套接字或應該被使用的命名管道。注意host參數決定連接的類型。
• client_flag值通常是0,但是在很特殊的情況下可以被設置爲下列標誌的組合:
標誌名字 意味着的標誌
CLIENT_FOUND_ROWS 返回找到的(匹配的)行數,不是受到影響的行數。
CLIENT_NO_SCHEMA 不允許db_name.tbl_name.col_name語法。這是爲了ODBC;如果你使用該語法,導致語法分析器產生一個錯誤,它是爲在一些ODBC程序捕捉錯誤是有用的。
CLIENT_COMPRESS 使用壓縮協議。
CLIENT_ODBC 客戶是一個ODBC客戶。這使mysqld變得對ODBC更友好。
2.1.3 返回值
如果連接成功,一個 MYSQL*連接句柄。如果連接失敗,NULL。對一個成功的連接,返回值與第一個參數值相同,除非你傳遞NULL給該參數。
例:
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
{
fprintf(stderr, "%s", "mysqlerror\n");
exit(1);
}
打印錯誤:
mysql_error(&mysql);
例:
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
{
perror(mysql_error(&mysql));
exit(1);
}
關閉連接:
mysql_close(pconnction);
執行sql語句:
int mysql_query(MYSQL* mysql,const char* sql);
mysql:連接的指針
sql:sql語句
返回:成功返回0,失敗返回非0
執行之前必須先設置字符集,包括文件的編碼。
注:system(sty erase ^H); //設置控制檯退格不回顯
例:
int main(int argc, char* argv[])
{
MYSQL mysql, *pconnection;
//初始化mysql對象,相當於初始化了一個TCP的socket對象
mysql_init(&mysql);
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
ERR_EXIT(mysql_error(&mysql));
//確保客戶端與server字符集相同,不然會出現程序出現漢字並且作爲where條件,不識別也不報錯
int ret = mysql_query(pconnection, "set names utf8");
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
// char *sql = "delete from people where id >15";
char *con = argv[1];
char p[10];
char name[100];
memset(name,0,sizeof(name));
memset(p,0,sizeof(p));
printf("請輸入條件1:");
//read(STDIN_FILENO,name,sizeof(name));
fgets(p,sizeof(p),stdin);
p[strlen(p)-1]=0;//將最後一位\n設爲NULL(因爲你再輸入後敲了個回車)
printf("請輸入條件2:");
fgets(name,sizeof(name),stdin);
name[strlen(name)-1]=0;
char sql[1024];
memset(sql,0,sizeof(sql));
sprintf(sql,"delete from people where %s%s'%s'",con,p,name);
printf("%s\n",sql);
ret = mysql_query(pconnection, sql);
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
mysql_close(pconnection);
return 0;
}
查詢語句:
MYSQL_RES *mysql_store_result(MYSQL *pmysql);
pmysql:打開的連接指針
成功返回一個查詢結果指針,失敗或查詢無結果返回NULL(不能用其判斷查詢結果爲空)
查看查詢結果:
MYSQL_ROW mysql_fetch_row(MYSQL_RES * result);
查看查詢結果中的字段信息:
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES * result);
釋放查詢資源:
mysql_free_result(MYSQL_RES* pres);//調用完mysql_store_result一定要用其釋放資源
例:查詢
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <mysql/mysql.h>
#define ERR_EXIT(m)\
do {perror(m);\
exit(EXIT_FAILURE);\
} while(0)
int main(int argc, char* argv[])
{
MYSQL mysql, *pconnection;
//初始化mysql對象,相當於初始化了一個TCP的socket對象
mysql_init(&mysql);
pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",
"db1", 0, 0, 0);
if (pconnection == NULL)
ERR_EXIT(mysql_error(&mysql));
//確保客戶端與server字符集相同,不然會出現程序出現漢字並且作爲where條件,不識別也不報錯
int ret = mysql_query(pconnection, "set names utf8");
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
char *sql = "select * from people";
ret = mysql_query(pconnection, sql);
if (ret != 0)
ERR_EXIT(mysql_error(&mysql));
MYSQL_RES *result;
result = mysql_store_result(pconnection);
//查詢字段
MYSQL_FIELD *field;
int count = 0;
while (1)
{
field = mysql_fetch_field(result);
if (field == NULL)
break;
printf("%s\t",field->name);
count++;
}
printf("\n");
//查詢記錄
MYSQL_ROW row;
while (1)
{
row = mysql_fetch_row(result);
if (row == NULL)
break;
int i;
for(i = 0; i < count ;i++)
printf("%s\t", row[i]);
printf("\n");
}
mysql_free_result(result);
mysql_close(pconnection);
return 0;
}