04.MySQL——用户管理

用户管理

用户管理的价值

04.MySQL——用户管理_第1张图片

用户

用户信息

MySQL中的用户,都存储在系统数据库mysql的user表中

use mysql;
select host,user,authentication_string from user;
  • host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
  • user: 用户名
  • authentication_string: 用户密码通过password函数加密后的

创建用户

create user '用户名'@'登陆主机/ip' identified by '密码';

删除用户

drop user '用户名'@'主机名'

修改用户密码

set password=password('新的密码');  //自己改自己密码
set password for '用户名'@'主机名'=password('新的密码') //root用户修改指定用户的密码

给用户授权

刚创建的用户没有任何权限,需要给用户授权。

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']

MySQL数据库提供的权限列表:

04.MySQL——用户管理_第2张图片

  • 权限列表,多个权限用逗号分开 all [privileges] 表示赋予该用户在该对象上的所有权限
  • . : 代表本系统中的所有数据库的所有对象
  • 库.* : 表示某个数据库中的所有数据对象
  • identified by可选。如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
  • 如果发现赋权限后,没有生效,执行如下指令: flush privileges;

回收权限

revoke 权限列表 on.对象名 from '用户名'@'登陆位置'

mysql connect

使用C语言连接mysql,需要使用mysql官网提供的库,在官网上下载合适自己平台的mysql connect库

  • 使用的时候需要引入mysql的头文件
#include 
  • 其中 include 包含所有的方法声明, lib 包含所有的方法实现
  • 通过mysql_get_client_info()函数,来验证引入是否成功

mysql接口介绍

初始化mysql_init()

MYSQL* mysql_init(MYSQL* mysql);

链接数据库

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 clientflag);

设置链接的默认字符集是utf8,原始默认是latin1

mysql_set_character_set(myfd, "utf8");  

下发mysql命令

int mysql_query(MYSQL *mysql, const char *q);

读取结果

MYSQL_RES *mysql_store_result(MYSQL *mysql);
  • 该函数malloc了一片内存空间来存储查询过来的数据,所以一定要记的 free(result),不然是肯定会造成内存泄漏的。 执行完mysql_store_result以后,数据都存放在MYSQL_RES 变量中。

获取结果行数

longlong mysql_num_rows(MYSQL_RES *res);

获取结果列数

unsigned int mysql_num_fields(MYSQL_RES *res);

获取列名

MYSQL_FIELD* mysql_fetch_fields(MYSQL_RES *res);

获取结果内容

MYSQL_ROW mysql_fetch_row(MYSQL_RES* result); //按照行读取文件内容,自动更新行数
  • 返回一个MYSQL_ROW变量,MYSQL_ROW其实就是char ** ,可以当成一个二维数组来用。

关闭mysql链接

void mysql_close(MYSQL *sock);

案例

  // 该函数用来连接 mysqld 并执行mysql语句
  // 将执行sql语句后的Question内容传到第二个参数vector中
  bool QueryMySql(const std::string &sql, vector<Question> *out)
  {
      // 创建mysql句柄
      MYSQL *my = mysql_init(nullptr);
      // 连接数据库
      if(nullptr == mysql_real_connect(my, host.c_str(), user.c_str(),                                   passwd.c_str(),db.c_str(),port, nullptr, 0))
      { 
          return false; 
      }
      // 设置该链接的编码格式, 要不然会出现乱码问题
      mysql_set_character_set(my, "utf8");
      
      // 执行sql语句
      if(mysql_query(my, sql.c_str())!= 0)
      {
          return false;
      }
      // 提取结果
      MYSQL_RES *res = mysql_store_result(my);
      
      // 分析结果
      int rows = mysql_num_rows(res);     //获得行数量
      int cols = mysql_num_fields(res);   //获得列数量
      Question q;
      //定义Question临时结构体,保存问题信息,插入到vector中
      //导入问题的信息到q中
      for(int i = 0; i < rows; i++)
      {
          MYSQL_ROW row = mysql_fetch_row(res);
          q.id = row[0];  
          q.title = row[1];
          q.star = row[2];
          q.desc = row[3];
          q.header = row[4];
          q.tail = row[5];
          q.cpu_limit = atoi(row[6]);
          q.mem_limit = atoi(row[7]);               
          out->push_back(q);
      }

      // 关闭mysql连接
      mysql_close(my);
      return true;
  }

你可能感兴趣的:(MySQL,mysql,数据库,linux,centos)