主頁 > 區塊鏈 > Linux13:MYSQL資料庫(MYSQL教程,MYSQL操作,MYSQL連接(函式呼叫)(讓MySql支持中文字符))

Linux13:MYSQL資料庫(MYSQL教程,MYSQL操作,MYSQL連接(函式呼叫)(讓MySql支持中文字符))

2020-10-31 07:35:24 區塊鏈

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

標籤:區塊鏈

上一篇:Eclipse連接SQL Server 2019 Express資料庫詳細程序

下一篇:SQL陳述句概述-DDL-資料型別

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more