MySQL:视图特性 | 用户管理 | 语言连接数据库


全文约 3421 字,预计阅读时长: 10分钟


视图

  • 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
  • 基表:原始表,修改两者中的一个都会互相影响。
  • 视图,存的是筛选的中间结果,不用每次都写冗长的sql语句来过滤得到最终结果。在本地存着的只有一个.frm文件,一种小而美的设计。

基本使用

  • 创建视图:

#create view 视图名 as select语句;

#create view v_ename_dname as select ename, dname
  • 修改了视图,对基表数据有影响;修改了基表,对视图有影响

#update v_ename_dname set dname='sales' where ename='CLARK'; //修改视图

#mysql> update EMP set deptno=20 where ename='JAMES'; //-- 修改基表
  • 删除视图:drop view 视图名;

视图规则和限制

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

用户管理

mysql 添加用户、修改权限,修改登录权限ip


如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。

  • 查看用户信息

  • 创建用户

  • 删除用户

  • 修改用户密码

  • 给用户授权

  • 回收用户的权限。


用户信息

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


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

创建用户

  • 语法:

#create user '用户名'@'登陆主机/ip' identified by '密码';
//示例
#mysql> create user 'comeon'@'localhost' identified by '12345678';
  • 此时便可以使用新账号新密码进行登陆啦。可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置。
  • 关于新增用户这里,不要轻易添加一个可以从任意地方登陆的user

删除用户

  • 语法:
  • 直接给个用户名,不能删除,它默认是%,表示所有地方可以登陆的用户。

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

//示例
#mysql> drop user 'comeon'@'localhost'; //--删除用户


修改用户密码

  • 自己改自己密码

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

  • root用户修改指定用户的密码

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

# flush privileges;
  • 根据数据库版本不同,方法略有差异,可用万能的度娘。

数据库的权限

  • 刚创建的用户毛权限都米有。权限可以细化到某个库的某个表的某个查或删或改的具体操作上。

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

在这里插入图片描述
在这里插入图片描述


给用户授权

  • 语法:

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

#grant select, delete, create on ....
#grant all [privileges] on ... //-- 表示赋予该用户在该对象上的所有权限
  • 权限列表,多个权限用逗号分开
  • *.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
  • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

回收权限

  • 语法:

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

//示例
#mysql> revoke all on test.* from 'comeon'@'localhost';

C语言连接数据库

  • 要使用C语言连接mysql,需要使用mysql官网提供的库,大家可以去官网下载。
  • 保证mysql服务有效;在官网上下载合适自己平台的mysql connect库,以备后用。

其中 include 包含所有的方法声明, lib 包含所有的方法实现(打包成库)。

  • 首先要安装一个叫 mysql-devel 东西,这个是一个驱动 通过 yum install mysql-devel 命令安装,
  • 通过 mysql_get_client_info() 函数,来验证我们的引入是否成功。
#include <stdio.h>
#include <mysql.h>
int main()
{
	printf("mysql client Version: %s\n", mysql_get_client_info());
	return 0;
}
# gcc -o test test.c -I./include -L./lib -lmysqlclient

#export LD_LIBRARY_PATH=./lib
  • 第三方库导入环境变量、或者移动到默认搜索路径下;或者给个软连接,编译时给个路径。。

mysql接口介绍

要使用库,必须先进行初始化!MYSQL *mysql_init(MYSQL *mysql);

初始化完毕之后,必须先链接数据库,在进行后续操作。(mysql网络部分是基于TCP/IP的)

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命令mysql_query

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

string s1 = "select * from table";
s1.c_str()作为第二个参数

获取执行结果mysql_store_result

  • 如果mysql_query返回成功0,那么我们就通过mysql_store_result这个函数来读取结果。
MYSQL_RES *mysql_store_result(MYSQL *mysql);
  1. 获取结果行数mysql_num_rows
my_ulonglong mysql_num_rows(MYSQL_RES *res);
  1. 获取结果列数mysql_num_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
  1. 获取列名mysql_fetch_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
int fields = mysql_num_fields(res);
MYSQL_FIELD *field = mysql_fetch_fields(res);
int i = 0;
for(; i < fields; i++)
{
	cout<<field[i].name<<" ";
}
cout<<endl;
  1. 获取结果内容mysql_fetch_row
  • 它会返回一个MYSQL_ROW变量,MYSQL_ROW其实就是char **.就当成一个二维数组来用吧。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

i = 0;
MYSQL_ROW line;
for(; i < nums; i++)
{
	line = mysql_fetch_row(res);
	int j = 0;
for(; j < fields; j++)
{
	cout<<line[j]<<" ";
}
cout<<endl;
}
  1. 关闭 mysql链接mysql_close
void mysql_close(MYSQL *sock);
  • mysql C api还支持事务等常用操作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值