变量
#变量 属性
/**
系统变量:
全局变量:作用于系统 服务器每次启动将为所有的全局变量赋予初始值 针对于所有的会话(连接)有效 但不能跨重启
会话变量:仅仅针对于当前的会话(连接)有效
自定义变量
用户变量
局部变量
*/
一、系统变量
# 一、系统变量
/*
说明:变量由系统提供 不是用户定义的 属于服务器层面
使用语法
1.查看所有的系统变量 全局变量
SHOW GLOBAL VARIABLES;
2.会话变量
SHOW SESSION VARIABLES
3.查看满足条件的部分系统变量
SHOW GLOBAL| 【SESSION】 VARIABLES LIKE '%char%'
4.查看某个指定的某个系统变量的值
SELECT @@GLOBAL|[SESSION].系统变量名
5.为某个系统变量赋值
set GLOBAL| SESSION 系统变量名 =值
SET autocommit =0;
SET @@GLOBAL|[SESSION].系统变量名=值
注意:
如果是全局级别 则需要加global
如果是会话级别 则需要加session 不写默认session
*/
#全局变量
SHOW GLOBAL VARIABLES;
#会话变量
SHOW VARIABLES;
#查看部分的会话变量
SHOW VARIABLES LIKE '%char%'
#查看某个指定的会话变量
SELECT @@transaction_isolation
#为某个变量赋值
set @@SESSION.transaction_isolation='read-uncommitted'
set transaction_isolation='read-committed'
自定义变量
# 自定义变量
/**
说明:变量是用户自定义的 不是由系统的
使用步骤
声明
赋值
使用(查看,运算,比较)
*/
#1.自定义用户变量
/**
作用域 :针对当前会话(连接)会话变量的作用域
应用在任何地方 也就是begin end 里面或begin end 外面
*/
#赋值操作符 :=|:=
#①声明 初始化
SET @用户变量名 = 值| set @用户变量名:=值|SELECT @用户变量名:=值
#②赋值(更新用户变量值)
#方式一
SET @用户变量名 = 值| set @用户变量名:=值|SELECT @用户变量名:=值
#方式二
SELECT INTO
#得到的值必须是一个值
SELECT 字段 INTO @变量名 FROM 表
#方式三 查看
SELECT @变量名
#查看方式
SET @name ='66666'
SELECT @name
SELECT @name1
SELECT COUNT(*) INTO @name1 FROM stuinfo;
#自定义局部变量
/**
作用域:仅仅在定义它的begin end 中有效
应用于 begin END 中的第一句话 !!!!
*/
#① 声明
DECLARE 变量名 类型
DECLARE 变量名 类型 DEFAULT 值;
#② 赋值
#方式一
SET 局部变量名 = 值| set 局部变量名:=值|SELECT @局部变量名:=值
#方式二
SELECT INTO
#得到的值必须是一个值
SELECT 字段 INTO @局部变量名 FROM 表
#使用
SELECT 局部变量名
作用域 定义和使用的位置
用户变量 针对于当前会话 BEGIN END 外|BEGIN END 里面{会话中任何地方]
局部变量 BEGIN END 里面 BEGIN END 中第一句话
# 求两个变量之和
#用户变量写的
set @m =4;
SET @n=8;
SEt @sum =@n+@m
#查看
SELECT @sum;
#局部变量 要放到 BEGIN END 中
DECLARE i BIGINT;
DECLARE j BIGINT ;
DECLARE sum1 INT = i+j;
存储过程
#存储过程和函数
/**
存储过程和函数 :类似于Java中的方法
好处:提高代码的重用性
简化操作
减少了编译次数并且减少了和数据库服务器的连接次数 提高了效率
*/
#存储过程
/**
含义:一组预先编译好的sql语句的集合 理解成批处理语句
类似java类 调用时会检查它是否编译 减少了编译次数
*/
#一、创建语法
CREATE PROCEDURE 存储过程名 (参数列表)
BEGIN
方法体(一组合法的SQL语句)
END;
注意:
1.参数列表包含三部分
参数模式 参数名 参数类型
举例
IN stuname VARCHAR(20)
1.参数模式
IN[进]:修饰参数 需要调用方传入值
OUT[出]:该参数可以输出 也就是该参数可以作为返回值
INOUT[即可进又可出]:该参数既可以作为输入又可以作为输出 ,该参数即需要传入值 又可以返回值
2.如果存储过程体仅仅只有一句话 BEGIN END 可以省略
存储过程体中的每条SQL语句的结尾要求加分号
存储过程的结尾可以使用 DELIMITER 重新设置
语法:
DELIMITER 结束标记
DELIMITER $
#二、调用语法
CALL 存储过程名(实参列表);
# 1.空参列表
#案例:插入到admin表中五条记录
SELECT * FROM admin;
DESC admin
#定义一个结束的标识 DELIMITER $
DELIMITER $
CREATE PROCEDURE mymp()
BEGIN
INSERT INTO admin ( username, `password` )
VALUES
( 'lily', '99991' ),
( 'lily1', '99992' ),
( 'lily2', '99993' ),
( 'lily3', '99994' ),
( 'lily4', '99995' );
END $;
#调用存储过程
CALL mymp();
#2.创建带in模式参数的存储过程
DESC beauty;
#案例1:创建存储过程实现 根据女神名 查询对应的男神信息
DELIMITER $
CREATE PROCEDURE my_girl ( IN girlname VARCHAR ( 20 ) ) BEGIN
SELECT
bo.*
FROM
beauty be,
boys bo
WHERE
bo.id = be.boyfriend_id
AND `name` = girlname;
END $;
SELECT * FROM beauty;
#调用my_girl
CALL my_girl('周芷若');
#案例2:创建存储过程实现 用户是否登录成功
desc admin;
DELIMITER $
CREATE PROCEDURE myp3(IN username VARCHAR(20),IN password VARCHAR(20) )
BEGIN
#设置变量名
DECLARE result VARCHAR(100) DEFAULT '';
#当参数与字段重名时使用表名引用
SELECT
COUNT( * ) INTO result
FROM
admin
WHERE
admin.`password` = `password`
AND admin.username= username;
SELECT IF(result>0,'登录成功','登录失败') as '结果';
END $;
# 调用
CALL myp3('john' , '8888');
#3.创建带out 模式的存储过程
#案例1:根据女神名 返回对应的男神名
DELIMITER $
CREATE PROCEDURE myp4(IN girlsName VARCHAR(20),OUT boyName VARCHAR(20))
BEGIN
SELECT
bo.boyName INTO boyName
FROM
boys bo,
beauty be
WHERE
be.boyfriend_id = bo.id
AND
be.`name` = girlsName;
END ;
#调用
SET @result ='';
#也可以直接放入 赋值
CALL myp4('小昭', @result);
#查询结果
SELECT @result;
#案例2:根据女神名 返回对应的男神名和男神魅力值
DESC boys
CREATE PROCEDURE myp5(IN girlsName VARCHAR(20),OUT boyName VARCHAR(20), OUT userCP INT)
BEGIN
SELECT
bo.boyName ,
bo.userCP INTO boyName ,userCP
FROM
beauty be,
boys bo
WHERE
bo.id = be.boyfriend_id
AND be.`name` =girlsName;
END;
#调用
CALL myp5('周芷若',@bName,@cp);
SELECT @bName,@cp;
#4.创建带inout模式参数的存储过程
#案例1:传入a和b两个值 最终a和b都翻倍并返回
CREATE PROCEDURE myp6(INOUT a int ,INOUT b int )
BEGIN
SET a=a*2;
SET b=b*2;
END;
#调用
#用户变量
SET @a =10;
SET @b=20;
#调用
CALL myp6(@a ,@b);
#查看
SELECT @a,@b;
#删除存储过程
#语法 DROP PROCEDURE 存储过程名
DROP PROCEDURE str_to
#三 查看存储过程的信息
SHOW CREATE PROCEDURE myp3;