"我该要怎么做,新的未来才会兑现承诺。"
(一)视图特性
什么是视图?
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
这种概念似乎 近似于 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...... ) + 断开连接
本篇到此结束感谢你的阅读
祝你好运~