数据库学习 | 增删查改基本操作及存储过程/触发器的使用

文章目录

  • 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语句的集合,可以简单的看作是批处理,但其功能不仅局限于批处理。

优点

  1. 简单:将操作封装在容易使用的单元中,简化复杂的操作
  2. 安全:减少复杂操作/管理带来数据安全问题
  3. 高性能:存储过程比单个MySQL语句执行的要快,并且可以编写更加灵活使用的代码。

创建存储过程

  • 存储过程 使用 beginend 来包含存储过程体
delimiter //
create procedure userage()
begin
	select avg(age) from tuser;
end//

【注意】:存储过程中,包含了 ; 所以需要使用 delimiter // 语句将语句分隔符替换为 //,这样写存储过程是才不会报错。写完之后可以使用 delimiter ; 将语句分隔符替换回来。

使用存储过程

call userage();

删除存储过程

drop procedure userage;		# 此处不带‘()’,只要写存储过程的名字就可以

存储过程中的参数/变量

  • 创建存储过程可以传入参数以及传出参数,使用关键字 inout
  • 输出参数在存储过程中使用关键字 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必知必会》

你可能感兴趣的:(数据库,学习,mysql,数据库,触发器)