linux mysql添加视图_Linux下MySQL的简单使用(二)

上一篇我们介绍到一些Linux的简单命令的使用,今天我们更深入了解一下MySQL!

一.多表查询

这篇通过实例来讲述多表查询,目的是穷尽所有的场景和所有的方法,并且对每个方法的使用做实例。 首先先列举本篇用到的分类(内连接,外连接,交叉连接)和连接方法:

A)内连接:join,inner join

B)外连接:left join,left outer join,right join,right outer join,union

C)交叉连接:cross join

首先导入hellodb.sql,以下的操作都是基于此:

1.内连接:仅查看有老师的学员和有学员的老师的信息

mysql> select s.name student_name,t.name teacher_name from students s inner join teachers t on s.teacherid=t.tid;+----------------+---------------+

| student_name | teacher_name |

+----------------+---------------+

| Sun Shangxiang | Liu Bang |

| Hou Yi | Wu Zetian |

| Da Ji | Cheng Jisihan |

+----------------+---------------+

3 rows in set (0.67 sec)

2.左内连接:显示所有学员信息,包含有老师的学员和没老师的学员

mysql> select s.name student_name,t.name teacher_name from students s left join teachers t on s.teacherid=t.tid;+----------------+---------------+

| student_name | teacher_name |

+----------------+---------------+

| Hou Yi | Wu Zetian |

| Ya Se | NULL |

| An Qila | NULL |

| Da Ji | Cheng Jisihan |

| Sun Shangxiang | Liu Bang |

| Huang Zhong | NULL |

| Liu Bei | NULL |

| Guan Yu | NULL |

| Zhang Fei | NULL |

| Di Renjie | NULL |

| Li Yuanfang | NULL |

| Lan Lingwang | NULL |

| Wang Zhaojun | NULL |

| Bai Qi | NULL |

| A Ke | NULL |

| Cai Wenji | NULL |

| Lv Bu | NULL |

| Diao Chan | NULL |

| Gong Sunli | NULL |

| Ming Shiyin | NULL |

| Dun Shan | NULL |

| Zhou Yu | NULL |

| Mi Yue | NULL |

| Kai | NULL |

| Sun Wukong | NULL |

+----------------+---------------+

25 rows in set (0.05 sec)

3.右内连接:显示所有的老师信息,包含有学员的老师,和没学员的老师

mysql> select s.name student_name,t.name teacher_name from students s right join teachers t on s.teacherid=t.tid;+----------------+---------------+

| student_name | teacher_name |

+----------------+---------------+

| Sun Shangxiang | Liu Bang |

| NULL | Ying Zheng |

| Hou Yi | Wu Zetian |

| Da Ji | Cheng Jisihan |

+----------------+---------------+

4 rows in set (0.00 sec)

4.左外连接:仅显示没老师的学员

select s.name student_name,t.name teacher_name from students s left join teachers t on s.teacherid=t.tid where t.name is null;+--------------+--------------+

| student_name | teacher_name |

+--------------+--------------+

| Ya Se | NULL |

| An Qila | NULL |

| Huang Zhong | NULL |

| Liu Bei | NULL |

| Guan Yu | NULL |

| Zhang Fei | NULL |

| Di Renjie | NULL |

| Li Yuanfang | NULL |

| Lan Lingwang | NULL |

| Wang Zhaojun | NULL |

| Bai Qi | NULL |

| A Ke | NULL |

| Cai Wenji | NULL |

| Lv Bu | NULL |

| Diao Chan | NULL |

| Gong Sunli | NULL |

| Ming Shiyin | NULL |

| Dun Shan | NULL |

| Zhou Yu | NULL |

| Mi Yue | NULL |

| Kai | NULL |

| Sun Wukong | NULL |

+--------------+--------------+

22 rows in set (0.00 sec)

5.右外连接:仅显示没学员的老师

select s.name student_name,t.name teacher_name from students s right join teachers t on s.teacherid=t.tid where s.name is null;+--------------+--------------+

| student_name | teacher_name |

+--------------+--------------+

| NULL | Ying Zheng |

+--------------+--------------+

1 row in set (0.00 sec)

6.并集:显示所有的老师和学员

mysql> select s.name student_name,t.name teacher_name from students s left join teachers t on s.teacherid=t.tid->union-> select s.name student_name,t.name teacher_name from students s right join teachers t on s.teacherid=t.tid;+----------------+---------------+

| student_name | teacher_name |

+----------------+---------------+

| Hou Yi | Wu Zetian |

| Ya Se | NULL |

| An Qila | NULL |

| Da Ji | Cheng Jisihan |

| Sun Shangxiang | Liu Bang |

| Huang Zhong | NULL |

| Liu Bei | NULL |

| Guan Yu | NULL |

| Zhang Fei | NULL |

| Di Renjie | NULL |

| Li Yuanfang | NULL |

| Lan Lingwang | NULL |

| Wang Zhaojun | NULL |

| Bai Qi | NULL |

| A Ke | NULL |

| Cai Wenji | NULL |

| Lv Bu | NULL |

| Diao Chan | NULL |

| Gong Sunli | NULL |

| Ming Shiyin | NULL |

| Dun Shan | NULL |

| Zhou Yu | NULL |

| Mi Yue | NULL |

| Kai | NULL |

| Sun Wukong | NULL |

| NULL | Ying Zheng |

+----------------+---------------+

26 rows in set (0.00 sec)

二.视图

视图是一种虚拟存在的表,视图可以理解为是一个容器,表通过条件查询之后,将查询后的结果放入这个容器内,然后给容器命名后即为视图。

视图相对于表的优势:

1.简单:使用视图的用户不必关系后面的表,只需要使用过滤好的内容就行了;

2.安全:因为对表的全新不能限制到表的行或者是列,所以可以通过视图来限制用户对表的访问权限;

3.数据独立:确定了视图的结构之后,如果给原来的表增加了列,并不会影响视图,增加行,视图的相对于的行也会增加,如果源表的列名称发生了改变,可以通过修改视图来解决。

例:如下图在单表上创建视图,选择表的name,age列作为视图v1_student的列。

mysql> desc students;

+-----------+---------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+---------------------+------+-----+---------+----------------+

| StuID | int(10) unsigned | NO | PRI | NULL | auto_increment |

| Name | varchar(50) | NO | | NULL | |

| Age | tinyint(3) unsigned | NO | | NULL | |

| Gender | enum('F','M') | NO | | NULL | |

| ClassID | tinyint(3) unsigned | YES | | NULL | |

| TeacherID | int(10) unsigned | YES | | NULL | |

+-----------+---------------------+------+-----+---------+----------------+

6 rows in set (0.00 sec)

mysql> create view v1_students as select name,age from students;

Query OK, 0 rows affected (0.00 sec)

查看已创建的视图

mysql>show create view v1_students\G;*************************** 1. row ***************************View: v1_students

Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1_students` AS select`students`.`Name` AS `name`,`students`.`Age` AS `age` from `students`

character_set_client: latin1

collation_connection: latin1_swedish_ci1 row in set (0.00 sec)

删除已创建的视图

mysql>drop view v1_students;

Query OK,0 rows affected (0.00sec)

mysql> select *from information_schema.views\G;

Empty set (0.06 sec)

三.函数

函数分为系统函数和自定义函数

系统函数:https://dev.mysql.com/doc/refman/5.7/en/func-op-summary ref.html,在这个官方的MySQL网站中,可以查看所有的系统函数。

自定义函数:(user-defined function UDF),保存在mysql.proc表中

1.创建一个自定义函数:

mysql> CREATE FUNCTION simpleFun() RETURNS VARCHAR(20) RETURN "Hello World!";

Query OK,0 rows affected (0.05sec)

mysql> selectsimplefun();+--------------+

| simplefun() |

+--------------+

| Hello World! |

+--------------+

1 row in set (0.05 sec)

2.查看所有的函数列表

mysql> show functionstatus;+---------+-----------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |

+---------+-----------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

| hellodb | simpleFun | FUNCTION | root@localhost | 2018-09-26 23:33:33 | 2018-09-26 23:33:33 | DEFINER | | latin1 | latin1_swedish_ci | utf8_general_ci |

+---------+-----------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

1 row in set (0.00 sec)

3.查看自定义函数的定义

mysql> show create functionsimplefun\G;*************************** 1. row ***************************Function: simplefun

sql_mode:

Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `simplefun`() RETURNS varchar(20) CHARSET utf8

RETURN"Hello World!"character_set_client: latin1

collation_connection: latin1_swedish_ci

Database Collation: utf8_general_ci1 row in set (0.00 sec)

4.删除自定义函数

mysql> drop functionsimplefun;

Query OK,0 rows affected (0.00sec)

mysql> show functionstatus\G;

Empty set (0.00 sec)

四.用户管理和授权

1.创建用户

语法:create user 用户名@主机 identified by 密码;

mysql> create user momoda@localhost identified by 'centos';

Query OK,0 rows affected (0.00sec)

mysql> selectuser,host,password from user;+--------+--------------------+-------------------------------------------+

| user | host | password |

+--------+--------------------+-------------------------------------------+

| root | localhost | *128977E278358FF80A246B5046F51043A2B1FCED |

| root | centos6.magedu.com | |

| root | 127.0.0.1 | |

| | localhost | |

| | centos6.magedu.com | |

| momoda | localhost | *128977E278358FF80A246B5046F51043A2B1FCED |

+--------+--------------------+-------------------------------------------+

6 rows in set (0.01 sec)

2.删除用户

mysql>drop user momoda@localhost;

Query OK,0 rows affected (0.00sec)

mysql> selectuser,host,password from user;+------+--------------------+-------------------------------------------+

| user | host | password |

+------+--------------------+-------------------------------------------+

| root | localhost | *128977E278358FF80A246B5046F51043A2B1FCED |

| root | centos6.magedu.com | |

| root | 127.0.0.1 | |

| | localhost | |

| | centos6.magedu.com | |

+------+--------------------+-------------------------------------------+

5 rows in set (0.00 sec)

3.授权

grant不仅可以用来授权,还可以用来创建用户;

授权的语法:grant 权限列表 on 库名.表名 to 用户@主机 identified by '密码';

刷新权限:flush privileges;

mysql> grant all on *.* to haha@'192.168.%.%' identified by '123';

Query OK,0 rows affected (0.00sec)

mysql>flush privileges;

Query OK,0 rows affected (0.00sec)

mysql> selectuser,host,password from user;+------+--------------------+-------------------------------------------+

| user | host | password |

+------+--------------------+-------------------------------------------+

| root | localhost | *128977E278358FF80A246B5046F51043A2B1FCED |

| root | centos6.magedu.com | |

| root | 127.0.0.1 | |

| | localhost | |

| | centos6.magedu.com | |

| haha | 192.168.%.% | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

+------+--------------------+-------------------------------------------+

6 rows in set (0.00 sec)

4.查看授权

mysql> show grants for haha@'192.168.%.%';+------------------------------------------------------------------------------------------------------------------------+

| Grants for haha@192.168.%.% |

+------------------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'haha'@'192.168.%.%' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |

+------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.01 sec)

5.回收授权

回收权限有两种方法:删除用户和revoke

回收语法:  revoke 权限 on 库名.表名 from 用户@主机;

mysql> revoke all on *.* from haha@'192.168.%.%';

Query OK,0 rows affected (0.00 sec)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值