一. 定义
存储过程 Procedure 是一组为了完成特定功能的 SQL 语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
以上是官方的定义。简单来说,如果把sql当成是代码,其实存储过程就相当于函数。把一组具备特定功能的sql语句封装成起来而已。所以他的本质是为了更好的执行对数据库的操作。那么好在哪里呢?
二. 存储过程的优势
1. 性能。存储过程在创建时就已经在数据库服务器中编译好并存储起来,调用时只需提供过程名和参数,就可以直接使用。而sql语句,没执行一句就要编译一次,这在sql语句发送并不频繁的情况下还好,但是如果短时间大量发送sql语句的情况下,不仅会降低网络性能也会增加数据库负担。
2. 可完成更复杂的数据库控制。由于存储过程中可以包含逻辑控制语句和数据操纵语句,类似遍历、if这种逻辑可以直接卸载过程中。
3.我在程序中写了一段代码,发送一千条sql插入语句到本地数据库,大概花了6672ms,而在存储过程中只花了4689ms。以下分别是代码和存储过程sql:
@Autowired
private JdbcTemplate jdbcTemplate;
public static final String INSERT_SQL="insert into user (id, name, age) values(?,?,?)";
public void insert(){
long begin = System.currentTimeMillis();
fo