MYSQL数据存储过程

162 阅读1分钟

记录一段常用的数据存储过程

  • DELIMITER: 用来定义除分号外的其他分隔符,例如有多次分号的场合,定义另一个符号作为分隔符。
  • LAST_INSERT_ID(): MYSQL自带函数,拿到insert或者update的最后一行的自增id。(单开一篇补充MYSQL自带的常用函数)
  • ROW_COUNT(): 返回写入表的行数。
  • FunctionA/FunctionB: 存储过程中也可以调用该DB里自定义的其他函数。
DELIMITER //
CREATE PROCEDURE insert_data(IN v1 INT, IN v2 INT, IN v3 INT)
    BEGIN
      DECLARE v1 INT DEFAULT 0;
      DECLARE v2 INT DEFAULT 0;
      DECLARE v3 INT DEFAULT 0;
      WHILE v1 > 0 DO
        INSERT INTO tableA (column1, column2...) VALUES (value1, value2..);
        SET xxx = LAST_INSERT_ID(); 
        WHILE v2 > 0 DO
            REPEAT
                SET xxx = FunctionA(FunctionB());
                INSERT IGNORE INTO campaign (column1, column2...) VALUES (xxx, ... NOW() + INTERVAL 1 DAY..);
            UNTIL ROW_COUNT() > 0 END REPEAT;
        END WHILE;
        SET v1 = v1 - 1;
      END WHILE;
      SET v2 = v2 - 1;
    END;
//
DELIMITER ;

call insert_data(1, 1, 2);

常用的相关命令

查看已存在的PROCEDURE或FUNCTION

SHOW PROCEDURE STATUS;

查询已存在的PROCEDURE或者FUNCTION的所有内容

select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_TYPE = 'PROCEDURE' or 'FUNCTION';

将一个DB里的所有ROUTINES(PROCEDURE和FUNCTION) copy到另一个DB里:

mysqldump

step1:
/usr/bin/mysqldump -hxxxx -uxxxx -Pxxxx -pxxxx --routines --no-create-info --no-data --no-create-db --skip-opt db_nameA > dump.sql

step2:
/usr/bin/mysql -hxxxx -uxxxx -Pxxxx -pxxxx  db_nameB < dump.sql

-h:host
-u:username
-P:port
-p:password