数据库(3):视图\用户管理\使用C语言链接

 "我该要怎么做,新的未来才会兑现承诺。"


(一)视图特性

什么是视图?

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 

这种概念似乎 近似于 C++中 引用 别名一般

语法:

create view 视图名 as select语句; 

 

(2)视图规则和限制 

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


(二)用户管理 

什么是用户管理呢?mysql的用户管理和linux相差无几。

每个用户都会赋予权限、操纵特定的库。并且无法看到别人的库。但是如果是root用户的话,可以看到mysql的所有库。

(1)用户信息 

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

select host,user,authentication_string from user; 

host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
user: 用户名
authentication_string: 用户密码通过password函数加密后的
*_priv: 用户拥有的权限

desc user; mysql中用户信息的表结构 

(2)用户权限

①创建用户 

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

②删除用户 

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

③修改用户密码 

自己修改自己

set password=password('新的密码'); 

root修改别人:

set password for '用户名'@'主机名'=password('新的密码');

这个也就不多解释。

(3)数据库权限 

 数据库权限种类繁多,但是经常用的也有限select\create\insert .....

①给用户授权

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

grant select on ...
grant select, delete, create on ....
grant all [privileges] on *.* to '用户名'@'登录位置' -- 表示赋予该用户在该对象上的所有权限

 很明显的,体现了不同用户 能看到的库是不同的。

 

②收回权限 

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

同grant授权用法类似。

③其他操作 

show grants for 'whb'@'%' ;特定用户现有查看权限
flush privileges; 如果发现赋权限后,没有生效,执行如下指令


(三)C++语言连接数据库 

mysql的基础,我们之前已经学过,后面我们只关心使用
要使用C语言连接mysql,需要使用mysql官网提供的库,大家可以去官网下载
我们使用C接口库来进行连接
要正确使用,我们需要做一些准备工作

(1)mysqlC++语言 连接过程

 ①检验是否能连上

mysql_get_client_info(); 

 g++找不到第三方库的mysql 因此可以打一个动态链接。

  

也就可以编译成功了 

 ②库初始化

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

mysql:初始化的my

host:主机

user:用户名

passwd:用户名密码

port:mysql服务器的端口号

 mysql_real_connect函数 的参数也很多。

包含了一个叫 st_mysql_methods的结构体变量,该变量里面保存着很
多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。mysql_real_connect函数中各参数,基本都是顾名思意

 ④库访问 

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

第一个参数上面已经介绍过,第二个参数为要执行的sql语句,如“select * from table”。

sql执行完以后,如果是查询语句,我们当然还要读取数据,如果update,insert等语句,那么就看下操作成功与否即可。我们来看看如何获取查询结果: 如果mysql_query返回成功,那么我们就通过mysql_store_result这个函数读取结果

MYSQL_RES *mysql_store_result(MYSQL *mysql);

同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。同时该函数malloc了一片内存空间来存储查询过来的数据所以我们一定要记的 free(result),不然是肯定会造成内存泄漏的。 执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了。

my_ulonglong mysql_num_rows(MYSQL_RES *res);   获取结果行数mysql_num_rows
unsigned int mysql_num_fields(MYSQL_RES *res); 获取结果列数mysql_num_fields


MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res); 获取列名mysql_fetch_fields

 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); 获取结果内容mysql_fetch_row

 ⑤释放退出库

当然别忘了关闭连接、释放空间

最后也就完成了C 与 库的连接。


总结

①视图create view as ... 可以创建一个新表。并且它的改变会影响 原表数据

②用户管理

创建用户:create user + 'user_name'@'host'  identified by '密码'; 

删除用户:drop user 'user_name'@'host'

用户授权: grant (all) on (库.表) to 'user_name'@'host'

用户撤权:revoke (all) on 库.表) from 'user_name'@'host'

③C库连接

mysql_get_client_info(); 获取客户端 mysql版本信息

初始化(init)+连接(real_connect) +数据读取(query \ mysql_store_result...... ) + 断开连接

本篇到此结束感谢你的阅读

祝你好运~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值