MySQL基础(3):进阶用法
一、视图
正式环境中有时需要只提供原始表的部分信息以保护数据安全性,就可以用视图,相当于虚拟表
#1、创建: CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...; #2、使用:把视图当虚拟表用 #3、修改: create or replace view 视图名 as 查询语句; alter view 视图名 as 查询语句; #4、删除: drop view 视图名1,视图名2...; #5、查看: show create view 视图名;
二、变量
1、系统变量:由系统提供,属于服务器层面
(1)全局变量:针对所有会话有效,但不能跨重启
(2)会话变量:针对一次会话
查看:show global/【session】 variables like '%char%' ; 设置:set global /【session】 系统变量名 = 值;
2、自定义变量:
(1)用户变量:针对当前会话有效,在begin end里或外都可以使用,声明时要初始化,要加@符号,不用限定类型
#1声明 SET @用户变量名 = 值; SET @用户变量名 := 值; SELECT @用户变量名 := 值; #2赋值 SELECT 字段 INTO @变量名 FROM 表; #3使用 SELECT @用户变量名;
(2)局部变量:仅在begin end中有效,且要在begin end中的第一句话,可不初始化,一般不加@,要指定类型
#1声明 DECLARE 变量名 类型; DECLARE 变量名 类型 DEFAULT 值; #2赋值 方式一:SET 局部变量名 = 值; SET 局部变量名 := 值; SELECT @局部变量名 := 值; 方式二:SELECT 字段 INTO 局部变量名 FROM 表; #3使用 SELECT 局部变量名;
三、存储过程
减少了编译次数也减少了和数据库服务器连接的次数
1、创建:
参数模式:IN、OUT、INOUT
DELIMITER定义结束标记
DELIMITER $ CREATE PROCEDURE test(IN girlName VARCHAR(20),OUT boyname VARCHAR(20)) BEGIN 执行SQL; END $
2、调用:
CALL test('name1',@bname)$ SELECT @bname$
3、删除:drop procedure 存储过程名;
4、查看:show create procedure 存储过程名;
四、函数
函数和存储过程类似,但是必须有且仅有1个返回
1、创建:一定要有return,但放的位置没有规定
2、调用:select 函数名(参数列表)
3、查看:show create function 函数名;
4、删除:drop function 函数名;
五、流程控制结构
1、if函数:表达式1成立,返回表达式2的值,否则返回表达式3的值
if(表达式1,表达式2,表达式3)
2、if结构
3、case:如果用于语句,end 后面加case;,用于表达式不用加case
4、循环:只能在begin end中使用
(1)while: 【标签名:】while 循环条件 do 循环体; end while【标签名】; (2)loop:需要搭配leave跳出,否则相当于死循环 【标签名:】loop 循环体; end loop【标签名】; (3)repeat:类似do while 【标签名:】repeat 循环体; until 结束循环的条件 end repeat【标签名】;
iterate类似continue,leave类似break,这两个需要和标签名搭配