将第一行中@后面的%改成特定可远程的ip即可,行

2019-10-05 作者:数据库   |   浏览(140)

一、视图介绍
1.1视图定义:是一个虚拟表,本身不包含数据,行和列的数据来自于自由定义视图查询所引用的列,在引用视图的时候动态生成。和普通的表格使用方式一致。
1.2视图的优点:
①简化操作:将复杂的sql关联查询和筛选条件进行视图封装,使用较为方便。
②安全性:视图可以定制可以查询到的数据(列值),提高了数据的安全性,用于权限控制。
③调高了数据查询效率。
④实现了一定层度上的逻辑独立性。
1.3视图和表格区别
图片 1
二、视图的使用
2.1视图的创建
语法:create view 视图名
as
查询语句;
表结构:
图片 2

转载自:

转载自:

1.本地服务器登录mysql

需求1:查询员工last_name like “c”的lase_name(员工名), department_name(部门名),job_title(工种名)
图片 3

什么是函数

mysql中的函数与存储过程类似,都是一组SQL集;

什么是视图

通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。

#mysql -uroot -proot

需求2:查询各个部门的平均工资的级别
图片 4

与存储过程的区别

函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值;

函数可以嵌入到sql语句中使用,而存储过程不能;

函数一般用于实现较简单的有针对性的功能(如求绝对值、返回当前时间等),存储过程用于实现复杂的功能(如复杂的业务逻辑功能);

视图的特性

视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);

可以跟基本表一样,进行增删改查操作(ps:增删改操作有条件限制);

 

2.2视图修改:
① create or replace view 视图名
as
查询语句;
② alter view 视图名
as
查询语句;
图片 5
图片 6

mysql自带函数

mysql本身已经实现了一些常见的函数,如数学函数、字符串函数、日期和时间函数等等,不一一列举,这里简单的使用下几个函数:

求绝对值ABS:

图片 7

求ASCII:

图片 8

时间相关(NOW、CURRENT_DATE、CURRENT_TIME):

图片 9

视图的作用

方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;

更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别;

2.授权远程登录

2.3查询视图
①desc chen;
②show create view chen02;
2.4删除视图
Drop view 视图名,视图名,(可多个);
三、视图数据更新
3.1可以实现:
数据的插入
数据的修改
数据的删除
会对原始表改变。【相应的CRUT】
图片 10
图片 11
图片 12

自定义函数

自定义个函数,判断输入参数是否大于等于10:

图片 13

-- ----------------------------
-- Function structure for `func_compare`
-- ----------------------------
DROP FUNCTION IF EXISTS `func_compare`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `func_compare`(a int) RETURNS varchar(200) CHARSET utf8
BEGIN
    #Routine body goes here...
  IF a >= 10 THEN
        RETURN '大于等于10';
  ELSE
      RETURN '小于10';
  END IF;
END
;;
DELIMITER ;

图片 14

验证函数:

SELECT func_compare(9), func_compare(11)

执行结果:

图片 15

使用场合

权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary...

关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;

mysql>grant all privileges on *.* to 'username'@'%' identified by 'password' with grant option;

3.2不可更新的视图
①包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
②常量视图
③Select中包含子查询
④含有 join 语句
⑤from一个不能更新的视图
⑥where子句的子查询引用了from子句中的表
图片 16

视图实例1-创建视图及查询数据操作

现有三张表:用户(user)、课程(course)、用户课程中间表(user_course),表结构及数据如下:

表定义:

图片 17图片 18

 1 -- ----------------------------
 2 -- Table structure for `course`
 3 -- ----------------------------
 4 DROP TABLE IF EXISTS `course`;
 5 CREATE TABLE `course` (
 6   `id` bigint(20) NOT NULL AUTO_INCREMENT,
 7   `name` varchar(200) NOT NULL,
 8   `description` varchar(500) NOT NULL,
 9   PRIMARY KEY (`id`)
10 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
11 
12 -- ----------------------------
13 -- Records of course
14 -- ----------------------------
15 INSERT INTO `course` VALUES ('1', 'JAVA', 'JAVA课程');
16 INSERT INTO `course` VALUES ('2', 'C  ', 'C  课程');
17 INSERT INTO `course` VALUES ('3', 'C语言', 'C语言课程');
18 
19 -- ----------------------------
20 -- Table structure for `user`
21 -- ----------------------------
22 DROP TABLE IF EXISTS `user`;
23 CREATE TABLE `user` (
24   `id` bigint(20) NOT NULL AUTO_INCREMENT,
25   `account` varchar(255) NOT NULL,
26   `name` varchar(255) NOT NULL,
27   `address` varchar(255) DEFAULT NULL,
28   `others` varchar(200) DEFAULT NULL,
29   `others2` varchar(200) DEFAULT NULL,
30   PRIMARY KEY (`id`)
31 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
32 
33 -- ----------------------------
34 -- Records of user
35 -- ----------------------------
36 INSERT INTO `user` VALUES ('1', 'user1', '小陈', '美国', '1', '1');
37 INSERT INTO `user` VALUES ('2', 'user2', '小张', '日本', '2', '2');
38 INSERT INTO `user` VALUES ('3', 'user3', '小王', '中国', '3', '3');
39 
40 -- ----------------------------
41 -- Table structure for `user_course`
42 -- ----------------------------
43 DROP TABLE IF EXISTS `user_course`;
44 CREATE TABLE `user_course` (
45   `id` bigint(20) NOT NULL AUTO_INCREMENT,
46   `userid` bigint(20) NOT NULL,
47   `courseid` bigint(20) NOT NULL,
48   PRIMARY KEY (`id`)
49 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
50 
51 -- ----------------------------
52 -- Records of user_course
53 -- ----------------------------
54 INSERT INTO `user_course` VALUES ('1', '1', '2');
55 INSERT INTO `user_course` VALUES ('2', '1', '3');
56 INSERT INTO `user_course` VALUES ('3', '2', '1');
57 INSERT INTO `user_course` VALUES ('4', '2', '2');
58 INSERT INTO `user_course` VALUES ('5', '2', '3');
59 INSERT INTO `user_course` VALUES ('6', '3', '2');

View Code

mysql>flush privileges;

表数据:

图片 19

这时,当我们想要查询小张上的所以课程相关信息的时候,需要这样写一条长长的SQL语句,如下:

图片 20

SELECT
    `uc`.`id` AS `id`,
    `u`.`name` AS `username`,
    `c`.`name` AS `coursename`
FROM
    `user` `u`
LEFT JOIN `user_course` `uc` ON ((`u`.`id` = `uc`.`userid`))
LEFT JOIN `course` `c` ON ((`uc`.`courseid` = `c`.`id`))
WHERE
    u.`name` = '小张'

图片 21

但是我们可以通过视图简化操作,例如我们创建视图view_user_course如下:

图片 22

-- ----------------------------
-- View structure for `view_user_course`
-- ----------------------------
DROP VIEW
IF EXISTS `view_user_course`;

CREATE ALGORITHM = UNDEFINED 
DEFINER = `root`@`localhost` 
SQL SECURITY DEFINER 
VIEW `view_user_course` AS (
    SELECT
        `uc`.`id` AS `id`,
        `u`.`name` AS `username`,
        `c`.`name` AS `coursename`
    FROM
        (
            (
                `user` `u`
                LEFT JOIN `user_course` `uc` ON ((`u`.`id` = `uc`.`userid`))
            )
            LEFT JOIN `course` `c` ON ((`uc`.`courseid` = `c`.`id`))
        )
);

图片 23

几点说明(MySQL中的视图在标准SQL的基础之上做了扩展):

ALGORITHM=UNDEFINED:指定视图的处理算法;

DEFINER=`root`@`localhost`:指定视图创建者;

SQL SECURITY DEFINER:指定视图查询数据时的安全验证方式;

创建好视图之后,我们可以直接用以下SQL语句在视图上查询小张上的所以课程相关信息,同样可以得到所需结果:

图片 24

SELECT
    vuc.username,
    vuc.coursename
FROM
    view_user_course vuc
WHERE
     vuc.username = '小张'

图片 25

//其中username为远程登录的用户名,password为远程登录的用户密码

本文由小鱼儿玄机30码发布于数据库,转载请注明出处:将第一行中@后面的%改成特定可远程的ip即可,行

关键词: 小鱼儿玄机30码