存储过程:指定特定功能的一条/多条sql语句/批处理语句。
函数:执行特定功能的一段代码进行封装。
储存过程 PHP里面的函数 方法 类似
局部变量:declare 变量名 数据类型 default 默认值;
变量的作用范围:begin end;之间
设置变量:set 变量名=变量值
传参方式:
in 传入参数
out 传出参数
select :相当于echo 输出 打印
out: 返回调用结果 相当于return
inout 传入传出参数
条件判断:if case
if 判断条件
then
//执行sql
elseif 判断条件
then
//执行sql
else
//执行sql
end if;
case 变量
when 比较的值 then
//执行sql
else
//执行sql
end case;
常见的3中循环
while循环栗子
#在新版本navicat要写第一行语句,老版则省略不写
create definer='root'@'localhost' procedure sp_24_while()
#开始创建过程
begin
#定义一个变量
declare i int default 0;
#条件为真 则执行代码
while i<10 do
insert into user(age) values(i);
set i=i+1;
end while;
end
执行新建的过程 call sp_24_while();
repeat循环栗子
repeat
#循环语句
until i=10 end repeat; #判断条件为真实停止循环
loop无限循环
loop
#循环语句
#要使用leave或iterate跳出
end loop
游标
游标相似于数组
1.创建游标
declare 游标名称 cursor for sql语句
2.打开游标
open 游标名称
3.取出游标值
fetch 游标名称 into 变量名//取出单个游标值
//结果集字段的顺序
fetch 游标名称 into 变量名1,变量名2,变量名3//取多个值
4.循环
停止条件
5.关闭游标
close 游标名称
栗子
BEGIN
DECLARE uman VARCHAR(20);
DECLARE i INT DEFAULT 0;
DECLARE sale_man_cur CURSOR FOR SELECT DISTINCT sale_man FROM xk_order WHERE sale_man <> '';
#检测异常 当游标中数据都取出来时i=1
DECLARE CONTINUE HANDLER FOR NOT found SET i=1;
#开启游标
OPEN sale_man_cur;
#取出游标
FETCH sale_man_cur into uman;
#循环
WHILE i = 0 DO
INSERT INTO user(name) VALUES(uman);
FETCH sale_man_cur INTO uman;
END WHILE;
#关闭游标
CLOSE sale_man_cur;
END
函数
create definer=current_user funcion 'func_25_getName'()
returns integer
begin
#定义变量
return 0;
end
高级特性:
1.contains sql
表明子程序包含sql语句(默认)
2.no sql
表明子程序不包含sql语句
3.reads sql data
:说明子程序包含读数据的语句
4.modiffes sql data
:表明子程序包含写数据的语句
执行命令保存在binlog
中(只要用于复制和回复)
【栗子】获取字符串中随机字符
查询:SELECT fun_18_string255
(展示随机字符串的长度);
事件
查看当前事件是否开启
查询:show variables like '%event_scheduler%';
开启:set GLOBAL event_scheduler = ON;
事件的创建简单方法:
事件的创建语句
create event 事件名称
on schedule at(单次)/every(多次)
at 单次执行事件
every 多次执行事件
on completion preserve/not preserve(-选填)
preserve 事件到期后保留事件
not preserve 事件到期后删除事件
disable/enable 关闭/开启(-选填)
commit '注释'
do 执行内容
视图
视图是一个虚拟存在的逻辑表
视图的优点:简单,安全,数据独立
事务
事务的特性:acid
原子性,持久性,隔离性,一致性
事务的隔离级别read uncommitted
(读未提交RU)会产生脏读现象read committed
(数据库的读以提交RC)产生不可重复读,幻读现象repeatable read
(可重复读RR-默认级别)避免脏读,不可重复读和幻读现象serializable
(串行化)类似队列一个一个执行,效率低最安全
#查看事务隔离级别
select @@session.tx_isolation;
#设置当前mysql隔离级别
set session transaction isolation level read uncommitted;
#设置数据库系统的全局隔离级别
set global transaction isolation level read committed;
显式
1.开启事务start transaction;
2.提交事务commit;
3.回滚事务rollback;
隐式
事务自动提交 show variables like 'autocommit';
事务自动提交关闭set autocommit=0;
mysql语句
mysql -u root -p
#输入密码
--使用数据库
use 库名
--展示所有表
show tables;
--设置编码
set names gbk;
--查看表数据
select * from 表名;
ps:什么时候使用索引
1.百万级数据
2.经常查询的字段
6个索引,
- 普通索引
- 唯一索引
- 全文索引
- 单列/多列索引
- 组合索引
注意索引失效,失效的情况
补充:
使用过程来添加测试数据
begin
#定义一个变量
declare i int default 0;
#条件为真 则执行代码
while i<500 do
insert into test(uname,age,r_number) values(md5(rand()*900),floor(rand()*90+10),floor(rand()*90000+10000));
set i=i+1;
end while;
end
评论