IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL:用户权限和语言接口 -> 正文阅读

[大数据]MySQL:用户权限和语言接口

1. 视图

视图是一个不怎么重要不怎么常用的机制。

视图是一个虚拟表,其内容由查询定义。视图和真实的表一样,包含一系列带有名称的列和行数据,

1.1 基本使用

create view `view_name` as select ...;

创建视图就相当于创建一张表,并且也以文件的形式保存在MySQL目录中。

但文件只保存了结构没保存数据,每次查看视图都会临时从表中获取数据。这样有个好处是视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

1.2 视图规定和限制

  • 与表一样,必须唯一命名(不能出现同名视图或表名)
  • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,必须具有足够的访问权限
  • order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by,那么该视图中的 order by 将被覆盖

?

2. 用户管理

用户管理的思路都是大同小异,可以类比Linux用户管理。

2.1 用户信息

MySQL中用户信息都在库mysql的user表中。

字段解释
host这个用户的允许登陆地,如果是localhost表示本地,%表示任意
user用户名
authentication_string用户密码通过password函数加密后的结果
*_priv用户拥有的权限,后面跟Y表示允许,N表示拒绝

创建用户

create user 'username'@'ip' identified by 'password';

用户被创建好,也无法进行大部分操作,需要对用户进行赋权。

删除用户

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

修改用户密码

# 自行修改密码
set password=password('新的密码');
# root用户修改其他用户密码
set password for '用户名'@'主机名'=password('新的密码');

2.2 用户权限

权限字段上下文
CREATECreate_priv数据库、表或索引
DROPDrop_priv数据库、表
GRANT OPTIONGrant_priv数据库、表或保存的程序
REFERENCESReferences_priv数据库或表
ALTERAlter_priv
DELETEDelete_priv
INDEXIndex_priv
INSERTInsert_priv
SELECTSelect_priv
UPDATEUpdate_priy
CREATE VIEWCreate_view_priy视图
SHOW VIEWShow_view_priv视图
ALTER ROUTINEAlter_routine_priy保存的程序
CREATE ROUTINECreate_routine_priv保存的程序
EXECUTEExecute_priv保存的程序
FILEFile_priv服务器主机上的文件访问
CREATE TEMPORARY TABLESCreate_tmp_table_priv服务器管理
LOCK TABLESLock_tables_priv服务器管理
CREATE USERCreate_user_priv服务器管理
PROCESSProcess_priv服务器管理
RELOADReload_priv服务器管理
REPLICATION CLIENTRepl_client_priv服务器管理
REPLICATION SLAVERepl_slave_priv服务器管理
SHOW_DATABASESShow_db_priy服务器管理
SHUTDOWNShutdown_priy服务器管理
SUPERSuper_priv服务器管理

用户赋权

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

赋权之后如果没反应,需要进行刷新权限:

flush privileges;

如果嫌麻烦的话可以直接把权限列表写成all

grant all on *.* to '用户名'@'登陆IP';

回收权限

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

?

3. C语言接口使用

安装环境

要想使用C/C++的MySQL接口,必须使用MySQL提供的库。如果当初是用yum安装MySQL的直接就有。

如果没有目录/usr/include/mysql,可以安装如下两个程序

$ yum install -y libodb-mysql-devel.x86_64
$ yum install -y soci-mysql-devel.x86_64 

链接静态库的时候,要指明库名和路径。

mysql_test:mysql_test.cc
        g++ -o $@ $^ -lmysqlclient -L/usr/lib64/mysql -std=c++11

这里有一个坑,库所在路径一定要指明/usr/lib64/mysql,如果找不到的话。

3.1 接口介绍

创建关闭句柄

//0. 创建MYSQL句柄
MYSQL* my = mysql_init(nullptr);
//4. 关闭数据库
mysql_close(my);

由此也可以看出MySQL其实是网络服务,句柄就是文件描述符。

连接数据库

//1. 连接MYSQL
char* host   = "127.0.0.1";
char* user   = "test";
char* passwd = "TESTtest123456!";
char* db     = "102_db";
char* port   = 3306;

if (mysql_real_connect(my, host, user, passwd, db, port, nullptr, 0) == nullptr) {
    std::cout << "connect failed" << std::endl;
    exit(1);
}
std::cout << "connect success" << std::endl;

设置字符编码

//2. 设置字符编码
mysql_set_character_set(my, "utf8");

设置字符编码为utf8,防止乱码。

执行SQL语句

//3. 执行SQL语句
// 增删改
std::string sql = "insert into account values (5, '猪八戒', 8.22)";
std::string sql = "delete from account where id=5";
std::string sql = "update account set name='唐僧' where id=5";
// 查
std::string sql = "select * from account";

int res = mysql_query(my, sql.c_str());
if (res != 0) {
    std::cout << "execute: " << sql << " failed" << std::endl;
    exit(2);
}

传入SQL语句,返回值为0表示成功,为1表示失败。

增删改SQL执行完就完了,如果是查询select语句我们还要读取结果。

获取查询结果

// 获取执行结果
MYSQL_RES* result = mysql_store_result(my);

依靠句柄获取最新一次查询结果,返回到MYSQL_RES结构体中。

同时该函数malloc了一块内存空间来存储查询过来的数据,所以一定要释放对应空间不然会造成内存泄漏。

获取行数列数

// 获取行数列数
int rows = mysql_num_rows(result);
int cols = mysql_num_fields(result);
std::cout << "行数: " << rows << " 列数: " << cols << std::endl;

获取字段名称

// 获取字段名称
MYSQL_FIELD* fields = mysql_fetch_fields(result);
for (int i = 0; i < cols; i++) {
    std::cout << fields[i].name << "\t";
}
std::cout << std::endl;

获取一行记录

//遍历获取记录
for (int i = 0; i < rows; i++) {
    MYSQL_ROW line = mysql_fetch_row(result);
    for (int j = 0; j < cols; j++) {
        std::cout << line[j] << "\t";
    }
    std::cout << std::endl;
}

mysql_fetch_row返回值就是一个char*的数组,保存的是一条记录中的每个字段值。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:41:07  更:2022-10-17 12:43:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/19 8:26:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码