MYSQL資料庫(MYSQL教程,MYSQL操作,MYSQL連接(函式呼叫)(讓MySql支持中文字符))
1.MYSQL教程:
1.1:對mysql資料庫的了解:
Mysql是最流行的關系型資料庫管理系統

1.2:mysql資料庫在ubuntu下的安裝:
安裝:
1.服務器的安裝:
apt-get install mysql-server
== 注==:自己指定用戶名(root)和密碼
2.客戶端的安裝:
apt-get install mysql-client
3 . 開發包的安裝:
apt-get install libmysqlclient-dev
安裝結果檢測:
netstat -tap | grep mysql
狀態查詢:
service mysql status
啟動:
service mysql start
關閉:
service mysql stop
mysql終端提示符所代表的含義:

1.3:mysql資料型別:



2 .mysql的相關操作:
2.1:與mysql建立連接:
登錄:
mysql -p
退出:
exit;
修改密碼:
即:修改root的密碼:
set password for '用戶名'@'主機名' = '新的密碼';
set password = '新密碼';----為當前登錄用戶修改密碼
清屏:
system clear;
2.2:mysql資料庫在終端的基本操作:
顯示已有的資料庫:
show databases;
如何自己創建一個資料庫:
create database xxx;
選擇資料庫:
use dbname;---dbname為選擇的資料庫名
使用資料庫:
use 資料庫名;
查看資料庫中的表:
show tables;
創建表:
注意:Atablemusthaveatleast1column
create table表名(列名型別,列名型別....);
//create table report(user varchar(20),passwd int);
查看表的結構:
describe 表名;
顯示表的內容:
select *from 表名;----顯示表中所有的內容
//*代表顯示全部內容,可以用列名代替*,顯示一列
select name, age from 表名;
//select*from表名;顯示表中所有的內容
//select列名1,列名2 from 表名;顯示具體某一列的
顯示表的框架:
show columns from 表名 from 資料庫;//顯示所有列/
//show columns from database.table;//等同
describe 表名;//顯示表的框架

向表中填入資訊:
insert into 表名 values (值);
//mysql> insert into 表格 values("dazai",123);

復制表格:
insert into tablename (col1,col2) select col,col3 from
dbname.tablename2;//復制過來往后排
//示例:into report (user,passwd) select name,age from
test.infor;
批量匯入將檔案中的資訊匯入表中:
注意:檔案必須是.txt結尾不同列之間用tab.
load data local infile ‘檔案路徑’ intotable 表名
//示例:load data local infile '/home/dazai/usr.txt'into table 表格;

修改表的內容:
update 表名 set 要修改的內容 where 條件;
//示例:update 表格 set dazai = 'zhongye' where 密碼 = 123;


洗掉表的內容:
delete from 表名 where 條件1 and/or 條件2;
//示例:delete from 表格 where 用戶="噠宰" and 密碼 = 123;
示例:delete from report where passwd > 100;
//洗掉passwd>100所有行
delete from report where user ="hello" orpasswd=
123;
//滿足user是hello或者passwd是123都洗掉
:

改索引:
添加列:
//alter tabel 表名 add 列名型別
//示例:
alter table 表格 add sex char;

修改列型別:
alter table 表名 modify 列名 新型別
//示例:
alter table 表格 modify passwd int(4);

洗掉列:
alter table 表名 drop 列名;
//示例:
alter table 表格 drop sex;

排序:
//示例:
select * from 表格 order by 密碼 desc;
//按照密碼降序排列,也能僅顯示用戶這一列

升序排序,如下圖:

3:MYSQL連接:C語言API型別:
3.1:mysql_real_connect()函式:
描述:
mysql_real_connect()嘗試與運行在主機上的MySQL資料庫引擎建立連接,在你能夠執行需要有效MySQL連接句柄結構的任何其他API函式之前,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)
函式形參:
1個引數應是已有MYSQL結構的地址,呼叫mysql_real_connect()之前,必須呼叫mysql_init()來初始化MYSQL結構,
mysql_init(MYSQL *mysql);
//MYSQL *mysql
typedef struct st_mysql_res {
my_ulonglong row_count;
// 結果集的行數
unsigned int field_count, current_field;
// 結果集的列數,當前列
MYSQL_FIELD *fields;
// 結果集的列資訊
MYSQL_DATA *data;
// 結果集的資料
MYSQL_ROWS *data_cursor;
// 結果集的游標
MEM_ROOT field_alloc;
// 記憶體結構
MYSQL_ROW row;
// 非緩沖的時候用到
MYSQL_ROW current_row; //mysql_store_result時會用到,當前行
unsigned long *lengths;
//每列的長度
MYSQL *handle;
// mysql_use_result會用,
my_bool eof; //是否為行尾
} MYSQL_RES;

“host”的值必須是主機名或IP地址,如果“host”是NULL或字串"localhost",連接將被視為與本地主機的連接,如果作業系統支持套接字(Unix)或命名管道(Windows),將使用它們而不是TCP/IP連接到服務器,
“user”引數包含用戶的MySQL登錄ID,
“passwd”引數包含用戶的密碼,
“db”是資料庫名稱,如果db為NULL,連接會將默認的資料庫設為該值,
如果“port”不是0,其值將用作TCP/IP連接的埠號,注意,“host”引數決定了連接的型別,
unix_socket默認NULL,
client_flag的值通常為0
回傳值:
失敗回傳NULL,成功回傳與第一個引數相同的值
注意事項:
寫代碼的時候需要添加==“mysql.h”==
編譯的時候需要添加以下內容
-I(大寫的i)/usr/include /mysql
-l(小寫的L)mysqlclient
//指定使用的mysql.h頭檔案的路徑以及使用的libmysqlclient.a(.so)庫
如果編輯的時候使用的頭檔案是**“mysql/mysql.h”**,
編譯的時候不需要加-I(大寫的i)選項
3.2:mysql_real_query()函式:
描述:
執行由“query”指向的SQL查詢,是字串長度位元組“long”,字串必須包含1條SQL陳述句,而且不應為陳述句添加終結分號(‘;’)或“\g”,如果允許多陳述句執行,字串可包含由分號隔開的多條陳述句
原型:
int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
形參:
query指向的SQL查詢
length個位元組的字串
回傳值:
成功零,錯誤非零,
3.3:mysql_store_result()函式:
描述:
將查詢的結果讀取到客戶端,置于分配的MYSQL_RES結構中,
typedef struct st_mysql_res {
my_ulonglong row_count;
// 結果集的行數
unsigned int field_count, current_field;
// 結果集的列數,當前列
MYSQL_FIELD *fields;
// 結果集的列資訊
MYSQL_DATA *data;
// 結果集的資料
MYSQL_ROWS *data_cursor;
// 結果集的游標
MEM_ROOT field_alloc;
// 記憶體結構
MYSQL_ROW row;
// 非緩沖的時候用到
MYSQL_ROW current_row; //mysql_store_result時會用到,當前行
unsigned long *lengths;
//每列的長度
MYSQL *handle;
// mysql_use_result會用,
my_bool eof; //是否為行尾
} MYSQL_RES;

函式原型:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
形參:
已有MYSQL的地址:
回傳值:
MYSQL_RES結果集合,錯誤回傳NULL,
相關聯的函式:
mysql_num_fields()函式:
描述:
獲取結果集中的列的數目
原型:
unsigned int mysql_num_fields(MYSQL_RES* res)
形參:
見上面說明
回傳值:
回傳結果集中的列的數目
mysql_num_rows()函式:
描述:
回傳一個結果集合中的行的數量
原型:
my_ulonglong mysql_num_rows(MYSQL_RES *result)
形參:
見上面說明
回傳值:
結果集中的行數(+1)
mysql_fetch_row()函式:
描述:
檢索結果集的下一行
原型:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
形參:
見上面說明
回傳值:
成功回傳結果集中下一行指標,否則NULL或錯誤碼
mysql_fetch_field()函式:
描述:
回傳一個MYSQL_FIELD 結構的一個結果集合的一個列的定義,重復呼叫這個函式在結果集合中檢索所有關于列的資訊,當沒有剩下更多的欄位時,mysql_fetch_field () 回傳NULL
原型:
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
回傳值結構體:

回傳值:
當前列的MYSQL_FIELD 結構,如果沒有列剩下,NULL
mysql_fetch_lengths()函式:
描述:
結果集內當前行的列長度
原型:
unsigned long *mysql_fetch_lengths(MYSQL_RES *result)
形參:
見上面說明;
回傳值:
無符號長整數的陣串列示各列的大小(不包括任何終結NULL字符),如果出現錯誤,回傳NULL
mysql_errno()函式:
描述:
回傳最近被呼叫的MySQL函式的出錯訊息
原型:
const char* mysql_error(MYSQL* mysql)
形參:
見上面說明
回傳值:
回傳最近一次呼叫失敗的錯誤訊息(回傳的是字串訊息)
3.3:mysql_free_result()函式:
描述:
釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為結果集分配的記憶體,
完成對結果集的操作后,必須呼叫mysql_free_result()釋放結果集使用的記憶體,
原型:
void mysql_free_result(MYSQL_RES *result)
形參:
見上面說明;
回傳值: 無;
3.4:mysql_close()函式:
描述:
關閉前面打開的連接,如果句柄是由mysql_init()或mysql_connect()自動分配的,mysql_close()還將解除分配由mysql指向的連接句柄,
原型:
void mysql_close(MYSQL *mysql)
形參:
見上面說明;
回傳值: 無;
代碼案例演示:
mysql.c
#include <stdio.h>
#include <mysql/mysql.h>
#include <string.h>
int main()
{
MYSQL Test;//定義MYSQL變數
MYSQL_ROW res_row;//
unsigned long *len = NULL;
mysql_init(&Test);//chushihua
if(mysql_real_connect(&Test,"localhost","root","liu...","mysql2",0,NULL,0) == NULL){
printf("連接失敗\n");
return -1;
}
printf("mysql 連接成功\n");
char name[20]={0};
printf("請輸入用戶名\n");
scanf("%s",name);
//char buf[300]="create table infor(user varchar(20),passwd int(4))";//1.創建表格
//char buf[300]="insert into infor values('噠宰',999)";
//插入資料
//char buf[300]="select * from infor";//無法顯示
char buf[300]="select passwd from infor where user = ";
//查看相關用戶的密碼
sprintf(buf,"%s '%s'",buf,name);//命令寫入buf
printf("buf = %s\n",buf);
if(mysql_real_query(&Test,buf,strlen(buf)) != 0)
//執行命令列
{
perror("query");//失敗
return -1;
}
printf("陳述句執行成功\n");
MYSQL_RES *res = NULL;//定義回傳值
res = mysql_store_result(&Test);//存放結果
if(res == NULL)
printf("函式執行失敗\n");//表格內容位空
else{
printf("存在用戶\n");
unsigned int field = mysql_num_fields(res);//回傳列
unsigned int row = mysql_num_rows(res);//回傳行
printf("查詢結果有%u行 %u列\n",row,field);//列印結果
if(row == 0)
{
printf("沒有該用戶\n");
}
else{
while(res_row=mysql_fetch_row(res))
{
len = mysql_fetch_lengths(res);//內容長度
for(int i=0;i<field;i++)//按列查詢
{
printf("用戶在第 %u 列,密碼 is %s,密碼lenth is %lu\n",i,res_row[i],*(len+i));
}
}
}
}
return 0;
}
代碼說明:
通程序式連接資料庫,并在資料庫里面創建表格,插入資料,
并通過輸入用戶的名字,查詢用戶的密碼等相關資訊,
運行結果:
資料庫:

終端:

補充:
讓MySql支持中文字符
在下圖路徑的檔案中:

用root權限下進行在終端改動:
第一個檔案debian.cnf下添加:
[client] 里面添加:
default-character-set = utf8
[mysql] 里面添加:
default-character-set = utf8
在第二個檔案mysql.conf.d檔案中mysqld.cnf下添加:
[mysqld] 里面添加:
character-set-client-handshake = FALSE
character-set-server = utf8
collation-server = utf8_unicode_ci
init_connect=’SET NAMES utf8
參考流程圖:
資料庫
注:需要使用xmind進行查看,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/196485.html
標籤:區塊鏈
