mysql存储过程

来源:互联网 发布:排课系统算法 编辑:程序博客网 时间:2024/05/01 20:25


因公司业务的需求学习了下,mysql 的存储过程。

之前一直用的是oracle的数据库,现在工作需要用的mysql 的数据库。对mysql存储过程学习做如下总结:


在mysql 里面的存储过程是被成为函数的,定时的去执行一个函数是叫作时间的执行


create proceduret_insert_table() 

begin 

  --  里面是具体的执行


/** 标记是否出错 */ 

    declare t_error int default 0; 

    /** 如果出现sql异常,则将t_error设置为1后继续执行后面的操作 */ 

    declare continue handler for sqlexceptionset t_error=1; --出错处理 

    /** 显式的开启事务,它开启后,事务会暂时停止自动提交*/ 

    -- start transaction; 

    /** 关闭事务的自动提交 */ 

    set autocommit = 0; 

    insert into t_test(parent_id,child_id)values('A','abcded'); 

    insert into t_test(name,age)values('zhangsan',null); 

    /** 标记被改变,表示事务应该回滚 */ 

    if t_error=1 then 

        rollback; -- 事务回滚 

    else 

        commit; -- 事务提交 

end if; 


end


在mysql里面根据原表去创建目标表的时候,我在网上找的资料是

-----复制表结构及数据到新表
  CREATE TABLE
新表  SELECT * FROM旧表


-----只复制表结构到新表

CREATE TABLE新表  SELECT * FROM 旧表 WHERE 1=2


只复制表的结构到新表上面红色的部分是不对的,

我是使用如下的sql执行正常操作的

Create table 新表 like 旧表


我自己做的一个小的测试如下:

CREATE PROCEDURE myinfo()

begin

  set@i=curdate();

  set@time=REPLACE(@i,"-","");

  set@timeStr=SUBSTR(@time,3,4); /*对时间格式进行处理*/

  set@sqlstr=CONCAT('CREATE TABLE `ss_cdr_cdr_info_',cast(@timeStr as char),'` likess_cdr_cdr_info');

 

 prepare stmt from @sqlstr;

 execute stmt;

 End;

没有出现什么异常


网上学习创建定时器处理如下:

mysql定时器是系统给提供了event,而oracle里面的定时器是系统给提供的job。下面创建表:


create table mytable (
id int auto_increment not null,
name varchar(100) not null default'',
introduce text not null,
createtime timestamp not null,
constraint pk_mytable primarykey(id)
)
创建存储过程,这里的存储过程主要提供给mysql的定时器event来调用去执行:
create procedure mypro()
BEGIN
insert into mytable(name,introduce,createtime) values ('1111','inner mongolia',now());
end;
这里只是简单的写了一下,只是为了说明例子。
紧接着创建mysql的定时器event
create event if not existseventJob
on schedule every 1 second
on completion PRESERVE
do call mypro();
这里设置为每一秒执行一次
至此所有的准备工作已经写完了,做完这些,mysql要想利用定时器必须的做准备工作,就是把mysql的定时器给开启了:
SET GLOBAL event_scheduler =1;  -- 启动定时器
SET GLOBAL event_scheduler =0;  -- 停止定时器
紧接着还要开启事件:
ALTER EVENT eventJob ON  COMPLETION PRESERVE ENABLE;   --开启事件
ALTER EVENT eventJob ON  COMPLETION PRESERVE DISABLE;  --关闭事件


SHOW VARIABLES LIKE '%sche%'; -- 查看定时器状态


真的是很实用。




0 0
原创粉丝点击