当前位置:Gxlcms > 数据库问题 > mysql的sql编程

mysql的sql编程

时间:2021-07-01 10:21:17 帮助过:7人阅读

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; insert into my_order values(null , 1 , 2); select * from my_goods; select * from my_order; -- 这个时候会发现另一个问题,就是触发器如果删除得成负数,那是有问题的。 -- 触发器结合if分支,判断商品库存是否足够,不够不能生成订单 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; insert into my_order values(null , 1 , 3); -- 系统函数 -- 定义两个变量 set @cn = 世界你好; set @en = hello world; select substring(@cn,1,1),substring(@en,1,1); -- 世 h ,字符串下表从1开始,以字节为单位 select char_length(@cn),char_length(@en),length(@cn),length(@en); -- 4 ,11 , 12 ,11 我的是utf-8编码 select instr(hello,he),instr(hello,s); -- 1 , 0 select lpad(@cn , 20, 欢迎),lpad(@en , 20 , hello); select insert(hello world , 3 , 3 ,y); -- key world set @fi = hello; set @se = key; set @th = KEY; SELECT strcmp(@fi , @se), strcmp(@se , @th), strcmp(@th , @fi); -- -1, 0 , 1 字符串不区分大小写在SQL中 -- 自定义函数 create function cs() returns varchar(50) begin return "hello world"; end; -- 调用函数 select cs(); -- 查看函数 【like pattern】 -- 函数从属于数据库 show function status like cs; -- 查看函数的创建语句 show create function cs; -- 修改函数 & 删除函数 -- 函数只能先删除后新增,不能修改 drop function cs; -- 做函数,计算1~n的累加 create function add1(n int) returns int begin set @i = 1; set @res = 0; while @i <= n do set @res = @res + @i; set @i = @i + 1; end while; return @res; end; select add1(3); -- 在函数内部定义的变量在函数外部也可以访问 select @res; -- 求和,1~n之间的数之和,5的倍数不加 create function add2(n int) returns int begin declare i int default 1; declare res int default 0; w1: while i <= n do if i%5 = 0 then set i = i + 1; iterate w1; else set res = res + i ; set i = i + 1; end if; end while; return res; end; select add2(5); -- 创建存储过程 create procedure p1() begin select * from my_goods; -- 假设过程中需要显示数据,使用select end; -- 调用过程 call p1(); -- 查看过程 show procedure status like p1; -- 查看过程创建语句 show create procedure p1; -- 过程参数 create procedure p2(in var1 int , out var2 int , inout var3 int) begin select var1,var2,var3; -- var2的值一定是null,进入过程前会清除值 end; -- call p2(1,2,3); in和inout参数只能传递变量而不能是值 set @int_1 = 1; set @int_2 = 2; set @int_3 = 3; select @int_1,@int_2,@int_3; -- 1,2,3 call p2(@int_1,@int_2,@int_3); -- 1, null, 3 select @int_1,@int_2,@int_3; -- 1, null , 3 -- out 和inout属于引用数据类型:内部修改会影响外部 -- 存储过程执行结束后,mysql将传入的引用变量修改后的值返回给实参。

 

mysql的sql编程

标签:模糊匹配   语句   ble   存在   bst   字符   variable   triggers   事务   

人气教程排行