触发器能监控增删改
语法
Create trigger triggerName
After/before insert/update/delete on 表名
For each row #这句话是固定的
Begin
Sql语句; # 一句或多句,insert/update/delete范围内
End;
修改结束符
Delimiter $$;把mysql的结束符改成$$;
栗子
create trigger t1
after insert on o
for each row
begin
update test1 set num=num-1 where id=2;
end;
行变量
New 指代 新增的那一行 old指代旧的那一行
触发器改进
Create trigger t1
After insert on o
For each row
Begin
Update test1 set num=new-new.much where id=new.id
End;
同一个表 只允许出现一个触发器
Drop trigger t1删除触发器
当我们下单时 应该先判断 商品有多少,然后在下单
Mysql 变量
Select num into @num from test1 where id=new.id;
表示把查出来num 值 付给 @num
条件语句
If new.much>@num then
Set New.much=@num//表示设置new .much的值为@num
End if
Update sql
End:
改进
Create trigger t1
Before insert on o
For each row
Begin
Select num into @num from test where id=new.id
If new.much >@num then
Set new.much=num//变量赋值
End if
Update sql
End;
create trigger t1
before insert on o
for each row
begin
select num into @num from test1 where id=new.id;
if new.much > @num then
set new.much=@num;
end if;
update test1 set num=num-new.much where id=new.id;
end$
存储过程
创建
Create procedure fuc1()
Begin
End
调用用call fuc1();
查看存储过程
Show procedure status;;
删除
Show procedure fuci;
带参数的存储过程
例子
Create procedure func1(n int)
Begin
Select * from goods limit 0,n;
End
例子
Create procedure fuc2(name ,char(1))
Begin
Select * from goods where name=name;
End;
例子
create procedure func2(n tinyint unsigned)
begin
set @cnt=0,@s=1;
while @s<n do
set @cnt=@cnt+@s;
set @s=@s+1;
end while;
select @cnt;
end$
函数
Create function f1(a int,b int)returns int//注意此处声明返回类型
Begin
Return a+b;
end