视图
增删改查和表一样,唯一变的是table改成view
视图会继承基表(源表)上的主键,但是在视图查看表头key显示空白
视图表就是保存了select语句的查询结果,可以理解为select语句的别名。
原表数据变化后,视图表的结果也会发生变化
安全原因,视图可以隐藏一些数据
CREATE VIEW "视图表名" AS "SELECT 语句"; #创建视图表
DROP VIEW "视图表名"; #删除视图表
-
如果视图表是两个表的连接查询,则无法插入数据。因为表结构和原表不一致。
-
如果视图表的结构和原表结构一致,可以修改和插入数据。
- 例如原表有3个字段,视图表有2个字段,只要这2个字段和原表结构是一致的,也可以修改和插入数据。(只要该视图表是对单个表的查询结果即可)
变量
系统变量 @@
查看所有系统变量
show global variables; # 查看所有全局变量
show session variables; # 查看当前会话变量
查看满足条件的部分变量
show global variables like '%char%'; # 不指定global的话,默认为会话变量
查看某个系统变量
变量结构为@@变量名、@@global.变量名、@@session.变量名
select @@tx_isolation; # 默认为会话变量
为系统变量赋值
set global|session 系统变量名=值
set @@global|session.系统变量名=值
用户变量
作用域
仅对当前会话有效,同于会话变量作用域
声明并初始化
SET @用户变量=值
SET @用户变量:=值
SELECT @用户变量:=值
赋值
SET @用户变量=值
SET @用户变量:=值
SELECT @用户变量:=值
SELECT 字段 INTO @用户变量 FROM 表
使用
SELECT @变量
存储过程
存储过程是可编程的函数,在数据库中创建并保存,可以由一组SQL语句和控制结构组成。 减少了编译次数并减少了和数据库的连接次数,提高了效率
创建存储过程:
DELIMITER $$ #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)
CREATE PROCEDURE Proc (参数模式 名称 类型)
-> BEGIN #过程体以关键字BEGIN开始
-> select * from store_info; #过程体语句
-> END $$ #过程体以关键字END结束
DELIMITER; #将语句的结束符号恢复为分号
调用存储过程
CALL Proc(实参);
参数模式
IN 输入参数: 表示调用者向过程传入值。(传入值可以是字面量或变量)
OUT 输出参数: 表示过程向调用者传出值。(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数: 既表示调用者向过程传入值,又表示过程向调用者传出值。(值只能是变量)
查看存储过程
show create procedure proc01;
show create procedure proc01\G #查看存储过程的具体信息
show procedure status like '%Proc01%'\G
删除存储过程
存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
drop procedure if exists proc01;
#仅当存在时删除,不添加If EXISTS 时,如果指定的过程不存在,则产生一个错误。
条件语句 if-then-else . .. . end if
delimiter $$
create procedure proc03(in innum int) #创建存储过程proc03,参数为innum,类型为int
-> begin
-> declare var int; #定义变量var为int类型
-> set var=innum*2; #变量var的值等于传入的参数值乘2
-> if var>=10 then #当var的值大于10时,id值会加1,否则减1
-> update t set id=id+1;
-> else
-> update t set id=id-1;
-> end if;
-> end $$
delimiter ;
call proc03(8); #调用存储过程,并传入参数8
call proc03(3); #调用存储过程,并传入参数3
循环语句 while ···· end while
delimiter $$ #修改默认结束符为$$
create procedure proc04() #创建存储过程proc04
-> begin #过程体以关键字begin开始
-> declare var int(10); #定义变量var为int类型
-> set var=0; #var的起始值为0
-> while var<6 do #使用while循环,当var值小于6时满足条件,则向表中插入var的值
-> insert into t values(var);
-> set var=var+1; #每次循环后var值自增1
-> end while; #结束while循环
-> end $$ #创建存储过程结束
delimiter ; #重新修改默认结束符为原始的;
call proc04; #调用存储过程proc04