--创建触发器
--需求: 有两张表, 一张订单表,一张商品表, 每生成一个订单,意味着商品的库存要减少.
--触发器:订单生成一个,商品减少一个
--创建数据表googs和order
create table my_goods(
id int primary key auto_increment,
name varchar(20) not null,
price decimal(10,2) default 1,
inv int comment '库存数量')charset utf8;
--插入数据
insert into my_goods values(1,'苹果','6500.3432',100),(null,'诺基亚','4320',230);
--创建my_order数据表
create table my_order(
id int primary key auto_increment,
g_id int not null comment '商品ID',
g_number int comment '商品数量'
)charset utf8;
--创建触发器
delimiter $$
create trigger before_order before insert on my_order for each row
begin
select inv from my_goods where id=new.g_id into @inv;
if @inc<new.g_number then
insert into XXX values(XXX);
end if;
end
$$
delimiter ;
--创建触发器:订单表中新增订单则在库存表中减去相应的数量
--验证订单数量与库存数量的大小
delimiter %%
create trigger before_order before insert on my_order for each row
begin
select inv from my_goods where id=new.g_id into @inv;
if @inv<new.g_number then
insert into xxx values(xxx);
end if;
end
%%
delimiter ;
--触发器:库存的数量减去订单增加的数量
delimiter $$
create trigger after_order after insert on my_order for each row
begin
update my_goods set inv=inv-new.g_number where id=new.g_id;
end
$$
delimiter ;
--插入订单
insert into my_order values(null,1,3);
--查看所有触发器
show triggers\G
--查看触发器创建语句
show create trigger goods_order\G
--创建函数
--创建存储过程
--设置全局变量
set @int_1=1;
set @int_2=2;
set @int_3=3;
--创建存储过程
delimiter $$
create procedure pro1(in int_1 int,out int_2 int,inout int_3 int)
begin
select int_1,int_2,int_3;
set int_1=10;
set int_2=100;
set int_3=1000;
select int_1,int_2,int_3;
select @int_1,@int_2,@int_3;
set @int_1='a';
set @int_2='b';
set @int_3='c';
select @int_1,@int_2,@int_3;
end
$$
delimiter ;
--调用存储过程:对比输出结果
call pro1(@int_1,@int_2,@int_3);
--查看全局变量
select @int_1,@int_2,@int_3;--值为:a 100 1000
--创建函数:求1到指定数的连加和
delimiter $$
create function sum1(int_1 int) returns int
begin
set @i=1;
set @res=0;
while @i <= int_1 do
set @res= @res + @i;
set @i=@i+1;
end while;
return @res;
end
$$
delimiter ;
--调用函数
select sum1(10);
--创建函数:求1到指定数值之间的连续和,并且能整出5的不相加
delimiter $$
create function sum2(int_1 int) returns int
begin
declare i int default 1;
declare res int default 0;
mywhile:while i<=int_1 do
if i%5=0 then
set i=i+1;
iterate mywhile;
end if;
set res=res+i;
set i=i+1;
end while;
return res;
end
$$
delimiter ;
--调用函数:sum2
select sum2(10);--输出值为40
select sum2(100);--之为4000
--系统函数
--字符串函数
--定义两个变量
set @cn='世界你好';
set @en='hello world';
--由于任何函数都有返回值,因此函数调用都用select来调用
--在gbk中一个字母为一个字符用一个字节存储,汉子一个字符用两个字节存储
select substring(@en,1,1),substring(@cn,1,1);--h 世
select char_length(@en),char_length(@cn);--查询字符: 11 4
select length(@en),length(@cn);--查询字节:11 8
select instr(@en,'l'),instr(@cn,'拜拜');--查询在字符串中是否含有子字符串,
--返回值:若有则返回个数,若没有则返回0
--替换:找到位置,制定字段,用制定的字符替换
select insert(@en,3,3,'y'),@en;--返回值:hey world, hello world
select lpad(@en,20,'welcome'),@en;--返回值:welcomewehello world,hello world
select lpad(@cn,20,'欢迎'),@cn;--返回值:欢迎欢迎欢迎欢迎欢迎欢迎欢迎欢迎世界你好,世界你好
set @a='a';
set @b='b';
set @c='A';
select strcmp(@a,@b),strcmp(@a,@c),strcmp(@b,@c);--返回值:-1,0,1 在mysql中不区分大小写
转载于:https://my.oschina.net/u/2483876/blog/519287