MySQL 视图&变量

视图

含义:虚拟表,和普通表一样使用,视图中的数据来自查询中使用的表,并且试图是动态生成的,并没有保存查询结果可以理解为封装:多次使用

 创建视图

语法结构:
   creat view 视图名
   as
   查询语句;


 案例 :创建视图查询每个部门的平均工资

 CREATE VIEW myv2
 AS
 SELECT AVG(salary) ag,`department_id`
 FROM employees
 GROUP BY department_id;

案例: #查询各部门工资级别

 SELECT myv2.ag,g.`grade_level`
 FROM myv2
 JOIN `job_grades` g
 ON myv2.ag BETWEEN g.`lowest_sal` AND `highest_sal`;

案例 #查询姓张的学生名和专业名

#之前写法

SELECT `stuNume`,`majorName`
FROM `stuinfo` s
INNER JOIN maijor m 
ON s.`maijorId`=m.`id`
WHERE s.`stuNume` LIKE '张%';

#做虚拟表,封装起来

CREATE VIEW v1
AS
SELECT `stuNume`,`majorName`
FROM `stuinfo` s
INNER JOIN maijor m 
ON s.`maijorId`=m.`id`;

SELECT *FROM v1 WHERE stuNume LIKE '张%';

二 视图的修改 

语法结构

方式1:
  create or replace view 视图名
  as
  查询语句;
  
  方式二:
  alter view 视图名
  as
  查询语句;


三 删除视图

drop view 视图名,视图名

四查看视图

DESC myv2;
SHOW CREATE VIEW myv2;

五 视图的更新(更新其中的数据)

MySQL 视图&变量_第1张图片

 这个其实很好理解:更新视图的时候同时修改了原始表,所以当视图中有多于原始表中内容的操作的时候都不能执行

#1.插入 (修改视图的时候,原始表也修改了,可以插入的条件是,没有额外多余原始表的东西

INSERT INTO myv1 VALUES('张',NULL,NULL);

SELECT *FROM myv1;

#2.修改

UPDATE myv1 SET last_name='zt' WHERE last_name=''

 #3.删除

DELETE FROM myv1 WHERE 条件

变量

系统变量:
   全局变量
   会话变量
自定义变量:
  用户变量
  局部变量

一 系统变量

 全局变量

作用域:服务器每次启动将为所有全局变量赋值,针对所有连接有效,但是不能跨重启

1.查看所有系统变量

 SHOW GLOBAL /【session】 VARIABLES

2.查看满足条件的部分系统变量

SHOW GLOBAL /【session】 VARIABLES LIKE ‘ ’;

3.查看某某个指定系统变量的值

SELECT @@global/【session】系统变量名 

4.为某个系统变量赋值

SET GLOBAL/【】 系统变量名=值
或
SET @@ global/【】 . 系统变量名=值;

会话变量

SHOW VARIABLES;
SHOW VARIABLES LIKE '%ssl%';
SELECT @@autocommit;
SET autocommit=0;
SET @@autocommit=1;

二 自定义变量

用户自己定义的  
声明 赋值 使用

1.用户变量

可以应用到任何地方

1.1声明并且初始化

SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @用户变量名:=值;

1.2 赋值

 和上面一样 或
SELECT 字段 INTO @变量名
FROM 表 

SET @coun=0;
SELECT COUNT(*) INTO @coun
FROM `employees`;

1.3 使用

SELECT @用户变量名;
SELECT @coun;

2.局部变量

声明 

DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;

赋值 

 SET 变量名=值
  SET 变量名:=值

使用

SELECT 局部变量名

对比

用户变量            局部变量

当前连接            只能在begin END 中第一句

SET @用户变量名=值    DECLARE 用户变量名 类型

案例 :声明两个变量并且赋值 求和 打印

1.用户变量 
SET @m=2;
SET @n=3;
SET@sum=@m+@n;
SELECT @sum;
2.局部变量
#下面这样写不行,需要在begin end 中
DECLARE m1 INT DEFAULT 5;
DECLARE n1 INT DEFAULT 6;
DECLARE summ INT ;
SET summ=m1+n1;
SELECT summ;

你可能感兴趣的:(mysql,sql,数据库)