show variables; --查看所有系统变量select@@autocommit--会话级别的修改set autocommit=0;set @@autocommit=0;--全局修改set global autocommit=0;--自定义变量set @变量名=值 set @name=‘张三‘ set @age := 18
--从表中获取数据赋值给变量 , 会话级别select number,name from my_account where id=1into @number,@age;
#触发器
事先为某张表绑定一段代码,当表中某些内容发生改变的时候(增删改),系统会自动触发代码,执行
触发器:事件类型、触发时间、触发对象
事件类型:增删改insert、delete、update
触发时间:before、after
触发对象:表中的每一条记录
一张表中只有拥有一种触发时间的一种类型的触发器:最多一张表能有6个触发器--创建触发器
语法:1、临时修改语句结束符
delimiter 自定义符号:后续代码中只有碰到自定义符号才算结束
create trigger 触发器名字 触发时间 事件类型 on 表名foreach row
begin
end
delimiter;
create table my_goods(
idintprimary key auto_increment,
name varchar(20) not null,
pricedecimal(10,2) default 1,
invint comment ‘库存数量‘)charset utf8;
insert into my_goods values(null,‘iphone6s‘,5288,100),(null,‘三星‘,5288,200);
create table my_order(
idintprimary key auto_increment,
g_idint not null comment ‘商品ID‘,
g_numberint comment ‘商品数量‘)charset utf8;
delimiter $$
create trigger after_order after insert on my_orderforeach row
begin
update my_goodsset inv = inv -1 where id=2;
end
$$
delimiter ;--有空格
show triggers;--查看所有触发器
show triggers\G;
show create trigger 触发器名字
show create trigger after_order
所有触发器都会保存到information_schema.triggers\G表中--使用触发器
insert into my_order values(null,1,2);--触发器删除
drop trigger after_order;--触发器记录
不管触发器是否触发了,只要当某种操作准备执行,系统就会将当前要操作的记录的当前状态和即将执行之后的状态给分别保留下来,供触发器使用;其中,要操作的当前状态保存到old中,操作之后可能形态保存给new
delimiter $$
create trigger after_order after insert on my_orderforeach row
begin
update my_goodsset inv = inv - new.g_number where id= new.g_id;
end
$$
delimiter ;--有空格
insert into my_order values(null,1,2);--库存判断
delimiter%%create trigger before_order before insert on my_orderforeach row
beginselect inv from my_goods where id=new.g_id into @inv;if @inv < new.g_number then
insert into XXX values(XXX);
endif;
end%%delimiter ;
insert into my_order values(null,1,20000);--循环结构
while循环(没有for循环)while 条件判断 doendwhile;
循环控制:在循环内部控制循环判断和控制
iterate:迭代,类似continue,后面的代码不执行,循环重新来过
leave:离开,类似break,整个循环接收
使用方式:iterate/leave 循环名字--定义循环名字
循环名字:while 条件 do
--循环体--循环控制
iterate/leave 循环名字
endwhile;
#函数(系统函数、自定义函数)
将一段代码块封装到一个结构中,在需要执行代码块的时候,调用结构执行即可(代码复用)--系统函数
mysql中,字符串的基本操作单位
substring:字符串截取(字符为单位)
char_length:字符长度
length:字节长度
instr:判断字符串是否在某个具体的字符串中存在,存在返回位置
lpad:左填充,将字符串按照某个指定的填充方式,填充到指定长度(字符)
insert:替换,找到目标位置,指定长度的字符串,替换成目标字符串
strcmp:字符串比较set @cn=‘世界你好‘;set @en=‘hello world‘;select substring(@cn,1,1);select substring(@en,1,1);selectchar_length(@cn),char_length(@en),length(@cn),length(@en);select instr(@cn,‘界‘); -- 0代表没有找到select lpad(@cn,20,‘欢迎‘);select insert(@en,3,3,‘y‘); --第三个位置,变3个set @f=‘hello‘;set @s=‘hey‘;set @t=‘HEY‘;select strcmp(@f,@s),strcmp(@s,@t),strcmp(@s,@f); --不区分大小写--自定义函数
create function 函数名([形参列表])returns 数据类型
begin--函数体
end
create function displayl() returnsint
return 100;select displayl(); --函数调用
show create function displayl\G;
修改函数&删除函数
函数只能先删除后新增,不能修改
drop function 函数名;
drop function desplayl;
函数参数
形参、实参
delimiter $$
create function desplayl(int_1int) returns intbeginset @i=1;set @res=0;while @i <= int_1 do
set @res = @res + @i; -- 没有+= ++
set @i = @i + 1;
endwhile;return@res;
end
$$
delimiter ;13340323263
select desplayl(10);select @res,@i; --在函数内部用@定义的变量在函数外部也可以访问--作用域
全局变量可以在任何地方使用;局部变量只能在函数内部使用
全局变量:使用set关键字定义,使用@符号标志
局部变量:使用declare关键字声明,没有@符号,所有的局部变量的声明,必须在函数体开始之前
delimiter $$
create function desplay2(int_1int) returns intbegin
declare iint default 1;
declare resint default 0;
mywhile:while i <= int_1 do
if i % 5 =0thenset i=i+1;
iterate mywhile;
endif;set res = res +i;set i=i+1;
endwhile;returnres;
end
$$
delimiter ;--存储过程
是一种没有返回值的函数
create procedure 过程名字([参数列表])
begin--过程体
end
create procedure pro1()select * from my_account; --var cpro_id = "u6292429";
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:http://www.cnblogs.com/walkerr/p/7289770.html