变量
变量 | ||
---|---|---|
系统变量 | 全局变量 | 针对所有会话(连接)有效,但不能跨重启(这需要修改配置文件) |
会话变量 | 对当前会话有效 | |
自定义变量 | 自定义变量 | 1,同于会话变量的作用域,2作用于会话中任何地方 3.必须添加@符号 |
局部变量 | 1.作用于BEGIN END中 2.BEGIN END的第一句3.一般不加@,需要限定类型 |
系统变量
1.查看系统变量
show global|session variables
2.查看满足条件的部分系统变量
show global|session variables like ‘%char%’
3.查看某个指定系统变量
select @@ global|session .变量名
4.为某个系统变量赋值
set global|session 系统变量名 = 值
set @@global|session .系统变量名 = 值
===>
SELECT @@global.autocommit #事务自动提交
SET @@session.tx_isolation='read-uncommitted' #更改隔离级别
如果为全局级别,需要加global,会话级别需要加session,如果不写则默认session
用户变量
SET @name='john';
SET @name=100;
SET @count=1;
SELECT COUNT(*) INTO @count
FROM employees;
SELECT @count
局部变量
DECLARE m INT DEFAULT 1;
DECLARE n INT DEFAULT 2;
DECLARE SUM INT;
SET SUM=m+n;
SELECT SUM;
存储过程
优点
1.提高代码重用性
2.简化操作
3.减少编译次数与和数据库服务器的连接次数,提高了效率
存储过程
一组预先编译好的SQL语句集合,理解成批处理语句。
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
方法体
END
- 参数列表
参数模式 参数名 参数类型
IN stuname VARCHAR(20)
参数模式:
IN/OUT/INOUT
- DELIMITER 结束标记($)
调用语法
- IN模式
#插入到admin表中五条记录
SELECT * FROM admin
DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,'password')
VALUES('john','0000'),('lily','0000');
END $
#调用
CALL myp1();
#带IN模式
CREATE PROCEDURE myp2(IN beautyName VCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT JOIN beauty b ON bo.id = b.boyfriend_id
WHERE b.name=beautyName;
END $
#调用
CALL myp2('苍老师') $
- 案例:查看用户是否登陆成功
CREATE PROCEDURE myp3(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
DECLARE result VARCHAR(20) DEFAULT '';#声明并初始化
SELECT COUNT(*) INTO result #赋值
FROM admin
WHERE admin.username = username
AND admin.password = PASSWORD
SELECT IF(result > 0,‘成功’,'失败');
END $
CALL myp3(‘张飞’,'8888') $
2.OUT模式
CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)
BEGIN
SELECT bo.boyName ,bo.userCP INTO boyName,userCP
FROM boys bo
INNER JOIN beauty b ON bo.id = b.friend_id
WHERE b.name=beautyName;
END $
CALL myp6('小昭',@bName,@usercp) $
3.INOUT模式
CREATE PROCEDURE myp8(INTOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END$
删除存储过程
DROP PROCEDURE p1;
查看存储过程
DESC myp2;
SHOW CREATE PROCEDURE myp2;