MySQL 常用的 procedure

循环执行

DROP PROCEDURE idata;
delimiter ;;
create procedure idata()
begin
  declare i int;
  set i=1;
  while(i<=100000)do
    insert into t values(i, i, i);
    set i=i+1;
  end while;
end;;
delimiter ;
call idata();

删除索引


-- drop index 的存储过程:当存在时删除,因为 drop index 不支持 if exists
DROP PROCEDURE IF EXISTS drop_index_if_exists;
DELIMITER //
create procedure drop_index_if_exists(IN p_db varchar(200),IN p_tablename varchar(200), IN p_idxname VARCHAR(200))
begin
  DECLARE str VARCHAR(250);
  set @str=concat(' drop index ',p_idxname,' on ',p_tablename); 
  select count(*) into @cnt from information_schema.statistics where table_name=p_tablename and index_name=p_idxname and TABLE_SCHEMA = p_db;
  if @cnt >0 then 
    PREPARE stmt FROM @str;
    EXECUTE stmt ;
  end if;
END
//
DELIMITER ;

删除列

-- drop column 的存储过程:当存在时删除,因为 drop column 不支持 if exists
DROP PROCEDURE IF EXISTS drop_column_if_exists;
DELIMITER //
create procedure drop_column_if_exists(IN p_db varchar(200),IN p_tablename varchar(200), IN p_columnname VARCHAR(200))
begin
  DECLARE str VARCHAR(250);
  set @str=concat(' alter table ',p_tablename,' drop column ',p_columnname); 
  select count(*) into @cnt from information_schema.columns where table_name=p_tablename and column_name=p_columnname and TABLE_SCHEMA = p_db;
  if @cnt >0 then 
    PREPARE stmt FROM @str;
    EXECUTE stmt ;
  end if;
END
//
DELIMITER ;

条件不满足立刻返回

DELIMITER //
create procedure check_duplicate()
label:begin
  select count(*) into @cnt from (select count(*) from dc_fb_form_tables group by `season_uuid`, `team_uuid`, `round_uuid`, `group_uuid` having count(*) > 1 order by null) t; 
  select concat('check dc_fb_form_tables count is ', @cnt,',') ;
  if @cnt > 0 then
    select 'fail';
    LEAVE label;
  end if;
  
  select count(*) into @cnt from (select count(*) from dc_fb_injuries group by `person_uuid`, `start_date` having count(*) > 1 order by null) t; 
  select concat('check dc_fb_injuries count is ', @cnt,',') ;
  if @cnt > 0 then
    select 'fail';
    LEAVE label;
  end if;
  
  select count(*) into @cnt from (select count(*) from dc_fb_match_event group by `match_uuid`, `event_type`, `code`, `person_uuid`, `team_uuid`, `minute` having count(*) > 1 order by null) t; 
  select concat('check dc_fb_match_event count is ', @cnt,',') ;
  if @cnt > 0 then
    select 'fail';
    LEAVE label;
  end if;
  
END
//
DELIMITER ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`PROCEDURE` 是 MySQL 中用于创建存储过程的关键字。存储过程是一组预先编写好的 SQL 语句集合,可以在需要的时候执行。使用存储过程可以将常用的 SQL 语句封装起来,方便重复使用,并且可以提高 SQL 执行效率。 创建存储过程的语法如下: ``` CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name param_type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } routine_body: valid_sql_statement ``` 其中,`sp_name` 是存储过程的名称,`proc_parameter` 是存储过程的参数列表,`characteristic` 是存储过程的特性,`routine_body` 是存储过程的主体部分,包括一系列有效的 SQL 语句。 例如,下面的示例代码创建一个名为 `get_customer` 的存储过程,它接受一个客户 ID 作为输入参数,然后从 `customers` 表中检索出该客户的信息: ``` CREATE PROCEDURE get_customer (IN customer_id INT) BEGIN SELECT * FROM customers WHERE id = customer_id; END; ``` 在这个例子中,`IN customer_id INT` 指定了一个输入参数 `customer_id`,它的类型为 `INT`。`SELECT` 语句用于检索出指定客户 ID 的信息。该存储过程可以在需要的时候调用,例如: ``` CALL get_customer(123); ``` 这将检索出客户 ID 为 123 的客户信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值