文章目录
- 1.增删查改操作
- 关键字顺序
- 查找数据
- 插入数据
- 更新数据
- 删除数据
- 2.存储过程
- 存储过程是什么?为什么要使用它?
- 创建存储过程
- 使用存储过程
- 删除存储过程
- 存储过程中的参数/变量
- 3.触发器
- 触发器是什么?为什么要用触发器?
- 创建触发器
- 删除触发器
- 使用触发器
- insert触发器
- delete触发器
- update触发器
1.增删查改操作
关键字顺序
- select
- from
- where
- group by
- having
- order by
- limit
查找数据
select * from tuser where age>15;
插入数据
insert into tuser values(1,'唐老鸭',20);
# 或
insert into tuser(id, username, age) values (1,'唐老鸭',20);
更新数据
update tuser set id=20,username='米老鼠' where id=7;
删除数据
delete from tuser where id=20;
2.存储过程
存储过程是什么?为什么要使用它?
存储过程是为了方便使用,保存的一条或者多条MySQL语句的集合,可以简单的看作是批处理,但其功能不仅局限于批处理。
优点:
- 简单:将操作封装在容易使用的单元中,简化复杂的操作
- 安全:减少复杂操作/管理带来数据安全问题
- 高性能:存储过程比单个MySQL语句执行的要快,并且可以编写更加灵活使用的代码。
创建存储过程
- 存储过程 使用 begin 和 end 来包含存储过程体
delimiter //
create procedure userage()
begin
select avg(age) from tuser;
end//
【注意】:存储过程中,包含了 ; 所以需要使用 delimiter // 语句将语句分隔符替换为 //,这样写存储过程是才不会报错。写完之后可以使用 delimiter ; 将语句分隔符替换回来。
使用存储过程
call userage();
删除存储过程
drop procedure userage; # 此处不带‘()’,只要写存储过程的名字就可以
存储过程中的参数/变量
- 创建存储过程可以传入参数以及传出参数,使用关键字 in 和 out
- 输出参数在存储过程中使用关键字 into 赋值
- 调用存储过程时,输出参数需要使用 ‘@’ 符号, 如下: @userage
create procedure userage(
in userid int, # 此处标识数据的格式为 int
in flag boolean,
out userage int
)
begin
declare TOTAL int; # 定义局部变量
select age from tuser where id=userid into userage;
if flag then
select 7 into userage;
end if;
end;
# 带参数的存储过程调用
call userage(1,0,@outPatam); # 调用时输出参数需要使用 ‘@’ 符号
3.触发器
触发器是什么?为什么要用触发器?
触发器:在表发生变动时,自动执行某些任务。是MySQL响应以下语句而自动执行的一条语句。
- delete
- update
- insert
【注意1】:触发器仅支持表
【注意2】: 【before】-> 事件 -> 【after】,以上事件以及两个触发器,任何一步失败,其后的操作都不执行。
创建触发器
创建触发器需要给出信息:
- 唯一的触发器名
- 触发器关联的表名
- 触发器关联的操作(delete, update, insert)
- 触发器执行的时间(before, after)
create trigger showage after insert on tuser
for each row select 'insert Successed';
# 每插入数据则显示语句,但MySQL 5.0以后不支持返回结果集,要显示可以使用变量,如下
#for each row select 'insert Successed' into @ee;
删除触发器
drop trigger showage; # 触发器不能修改
使用触发器
insert触发器
- new的虚拟表
create trigger showage after insert on tuser
for each row select new.age into @param;
delete触发器
- old的虚拟表(只读)
create trigger showage after delete on tuser
for each row
begin
insert into tuser2 values(old.id, old.username, old.age);
end;
update触发器
- old的虚拟表(只读):访问更新前的值
- new的虚拟表:访问更新后的值
【参考书籍】:《MySQL必知必会》