在实际开发中,除了创建表之外,还有一种方式,就是创建视图,视图是一种虚拟存在的表,数据来源于定义视图的查询中使用的表,而且使用视图时数据是动态生成的,只保存SQL逻辑,不保存查询结果。创建视图语法如下:CREATE VIEW 视图名 AS 查询语句;示例代码:
CREATE VIEW v1 AS SELECT stu_name,gender FROM stuinfo s INNER JOIN major m ON s.major_id = m.id;
CREATE VIEW my_view AS SELECT last_name,department_name,job_title FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN jobs j ON j.job_id = e.job_id;
SELECT * FROM my_view WHERE last_name LIKE '%K%';
视图的修改:①CREATE OR REPLACE VIEW 视图名 AS 查询语句;②ALTER VIEW 视图名 AS 查询语句; 。删除视图:DROP VIEW 视图名,视图名……;。查看视图:SHOW CREATE VIEW 视图名;。
视图的好处:重用SQL语句;简化复杂的SQL操作,不必知道它的查询细节;保护数据,提高安全性。视图与表的对比:①创建关键字不同:view与table;②视图只保存了SQL逻辑,表保存了实际数据;③视图一般不能增删改。在SQL中也有变量的概念,类似于编程语言中的变量,变量是后面存储过程和函数的基础。变量分为系统变量和自定义变量,系统变量又分为全局变量和会话变量,自定义变量又分为用户变量和局部变量。系统变量由系统提供,不是用户自定义,属于服务器层面。全局变量作用域是服务器每次启动将为所有的全局变量赋初始值,对于所有的会话(连接)有效,但不能跨重启。会话变量的作用域仅对于当前会话(连接)有效。SHOW GLOBAL|SESSION VARIABLES;
SHOW GLOBAL VARIABLES LIKE 'char%';
SELECT @@global|[SESSION].系统变量名;
SELECT @@global.autocommit;
SELECT @@tx_isolation;
SET GLOBAL|[SESSION] 系统变量名 = 值;
SET @@global|[SESSION].系统变量名 = 值;
SET @@global.autocommit = 0;
从上面可以看出,如果是全局级别,则需要加global,如果是会话级别,则需要加session,如果不写,则默认为session。
自定义变量是用户自定义的,不是由系统提供的,其中用户变量的作用域对于当前会话(连接)有效,自定义变量需要声明并且初始化,语法为:①SET @用户变量名 = 值;②SET @用户变量名 := 值;③SELECT @用户变量名 := 值;。声明后需要赋值:语法为:①SET @用户变量名 = 值;②SET @用户变量名 := 值;③SELECT @用户变量名 := 值; 还可以通过SELECT 字段 INTO @变量名 FROM表;的方式赋值。示例如下:SELECT COUNT(*) INTO @count FROM employees;
局部变量仅仅在定义它的BEGIN END中有效,它的使用有三步:①声明:DECLARE 变量名 类型; 或 DECLARE 变量名 类型 DEFAULT 值; ②赋值:SET 局部变量名 = 值; 或 SET 局部变量名 := 值; 或 SELECT @局部变量名 := 值; 或 SELECT 字段 INTO 局部变量名 FROM 表;。③使用:SELECT 局部变量名;。# 用户变量
SET @m=1;
SET @n=2;
SET @sum = @m + @n;
SELECT @sum;