存储过程和数据导入

目前在很多项目中都会使用存储过程。

存储过程在用来处理业务逻辑比较复杂的项目是有利于程序员节省时间。一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率,适合用于批量处理数据。同时存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。


   存储过程一般的语法格式如下:

create procedure 存储过程名

began 

中间体

end

mysql 存储过程的写法:

DELIMITER $$   //$$代表的是分号  
DROP PROCEDURE IF EXISTS HelloWorld$$   //如果表存在将表删除
CREATE PROCEDURE HelloWorld()   //创建存储过程
BEGIN                           //开始
     
SELECT "Hello World!";   //中间体
END$$                         //结束  
DELIMITER ;    



DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET v_err = 1;

用于处理异常其中continue是继续执行的意思,exit直接退出。


另外如果大家想把一张表中的数据导入到另一张表可以使用两种方法,一种是写sql 

如:insert into 库名.表名 select * from 另一个库名.表名;commit;

另一种方法就是将一张表中的数据先到处然后再在另一张表中执行导出的数据。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的MySQL存储过程,可以读取指定路径下的txt文件并将其数据导入到MySQL数据库中。需要注意的是,该存储过程只适用于数据格式为逗号分隔的txt文件,且第一行为表头的情况。 ``` DELIMITER $$ CREATE PROCEDURE import_txt(IN file_path VARCHAR(255), IN table_name VARCHAR(255)) BEGIN DECLARE line VARCHAR(255); DECLARE col1 VARCHAR(255); DECLARE col2 VARCHAR(255); DECLARE col3 VARCHAR(255); DECLARE col4 VARCHAR(255); DECLARE col5 VARCHAR(255); DECLARE col6 VARCHAR(255); DECLARE col7 VARCHAR(255); DECLARE col8 VARCHAR(255); DECLARE col9 VARCHAR(255); DECLARE done INT DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT * FROM information_schema.columns WHERE table_name = table_name; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; SET @sql = CONCAT('LOAD DATA LOCAL INFILE "', file_path, '" INTO TABLE ', table_name, ' FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n" IGNORE 1 LINES (', col1, ',', col2, ',', col3, ',', col4, ',', col5, ',', col6, ',', col7, ',', col8, ',', col9, ')'); OPEN cur; read_loop: LOOP FETCH cur INTO line; IF done THEN LEAVE read_loop; END IF; IF line.COLUMN_NAME = 'col1' THEN SET col1 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col2' THEN SET col2 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col3' THEN SET col3 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col4' THEN SET col4 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col5' THEN SET col5 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col6' THEN SET col6 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col7' THEN SET col7 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col8' THEN SET col8 = CONCAT('`', line.COLUMN_NAME, '`'); ELSEIF line.COLUMN_NAME = 'col9' THEN SET col9 = CONCAT('`', line.COLUMN_NAME, '`'); END IF; END LOOP; SET @sql = CONCAT('LOAD DATA LOCAL INFILE "', file_path, '" INTO TABLE ', table_name, ' FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n" IGNORE 1 LINES (', col1, ',', col2, ',', col3, ',', col4, ',', col5, ',', col6, ',', col7, ',', col8, ',', col9, ')'); PREPARE stmt FROM @sql; EXECUTE stmt; CLOSE cur; END$$ DELIMITER ; ``` 使用方法: 1. 将上述存储过程复制到MySQL客户端中执行,创建存储过程。 2. 调用存储过程传入文件路径和表名。 ``` CALL import_txt('file_path', 'table_name'); ``` 其中,`file_path`为txt文件的绝对路径,`table_name`为导入数据的目标表名。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值