变量
系统变量:
全局变量,会话变量
自定义变量:
用户变量,局部变量
系统变量
属于服务器层面
语法:
1. 查看所有系统变量
show global variables
show session variables
2. 条件筛选
show global variables like %...%
show session variables like %...%
3.指定查看某个系统变量
select @@gloabl .系统变量名
4.系统变量赋值
1.set global 系统变量名 = 值
2.@@global .系统变量名 = 值
默认都是 session
全局变量
跨连接,不是跨重启(服务器重启后 重新赋予初始值)
show global variables` `
show global variables like '%char%'` `
select @@global.autocommit` `
set @@global.autocommit=0 #取消自动提交(跨连接有效)
会话变量 不能跨连接
select @@tx_isolation; # 隔离级别
set @@session.tx_isolation = 'read-uncommitted' #设置为第一隔离级别
set session tx_isolation = 'read-committed' #第二隔离级别
自定义变量(任何地方)
声明 赋值 使用enmmmm…
作用域 :会话有效
1.声明,赋值 都是一样滴
set @a = 2
set @b:= 3
select @a:= 5
赋值方式 二
select 字段 into 变量名
from 表
查看:
select @a
局部变量( 必须是 begin end 第一句话)
作用域:定义在 begin end 中有效的(弹幕说:你没学过java吗…)
声明:
declare 变量名 类型;
declare 变量名 类型 default 值
赋值 使用
一样一样的(见全局赋值)
对比记忆一下?…算了吧
写个 a+b=?
set @a=1;
set @b=2;
set @sum = @a+@b;
select @sum
存储过程:(对比 java 方法)
含义:一组预先编译好的sql语句集合,可理解为 批处理语句
(减少编译次数,减少连接数据库次数,代码重用性,简化操作【暴露接口】)
一,创建
create procedure 存储过程名zhi(参数列表)
BEGIN
存储过程体(弹幕说:你没学过 c++吗 )
END
参数列表(参数模式,参数名,参数类型) 参数模式是啥子鬼
举个栗子: IN stuname varchar(20)
参数模式:三个
in :参数可以作为输入(传值进去)
out :该参数可以作为输出(做返回值,传值出去)
inout :既可以传入,又可以返回值
提示
存储过程体中每一条 SQL 语句的结尾要求必须加 ;
存储过程的结尾 可以 使用 delimiter 重新设置(避免与 ;混淆)
语法:
delimiter 结束标记
二,调用
call 存储过程名(参数列表)
1.空参数列表
插入五条记录
select* from admin
delimiter $
create procedure my()
BEGIN
insert into admin(username,password)
VALUES('jack','0000'),('rose','1111'),('lucy','2222');
END $
调用:
call my()$ (弹幕说 :navcat....里面这里加个结束符号会报错)
2.带参列表 IN模式,传入我女神,查询我女生的男盆友
delimiter $
create procedure mylady(IN beautyName VARCHAR(20))
BEGIN
select bo.*
from boys bo
RIGHT JOIN beauty b on bo.id = b.boyfriend_id #考虑到有滴人么有男盆友,所以外连接一下
WHERE b.`name` = beautyName;
END $
CALL mylady('热巴')
create procedure mylogin(IN username VARCHAR(20),IN password VARCHAR(20))
BEGIN
declare result int default 0;
select count(*) into result
from admin
where admin.username = username
and admin.password = password;
select IF(result > 0,'成功','失败');
END $
CALL mylogin('jack','0000')
out 模式参数,inout模式参数不再详述,参考其他编程语言即可。
三,其他操作
补充:
局部变量 可以直接 set,不需要 @符号
删除:(只能单个删除)
drop procedure 存储过程名
查看存储过程
show create procedure mylady