Linux13:MYSQL数据库(MYSQL教程,MYSQL操作,MYSQL连接(函数调用)(让MySql支持中文字符))

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进行查看。

猜你喜欢

转载自blog.csdn.net/weixin_40734514/article/details/109336997