记录一段常用的数据存储过程
- 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