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 事务