第 15 章 · 第一节
把一段代码存进数据库
从这一章起,写给数据库的不再是一句,是一段。

重 点
前十四章每敲一句执行一句,这一章第一次把一整段代码交出去。
打个比方
一句话说完就走,和把一套流程写成手册放在柜子里,随时照着做。
从这一章起,写给数据库的不再是一句,是一段。

前十四章每敲一句执行一句,这一章第一次把一整段代码交出去。
一句话说完就走,和把一套流程写成手册放在柜子里,随时照着做。
存储过程和存储函数,中间三节是写它们要用的零件。

第二、三节是零件铺,变量、运算符、流程控制、内置函数都在那儿。
为什么零件要先讲,过程反而放后面?
一个叫存储过程,一个叫存储函数,差别不小。

两个都是存在数据库里的一段 SQL,区别在怎么调、有没有返回值。
编程语言里的函数,跟这两个哪个更像?
写一次,存进去,往后一句 CALL 就跑。

| 做法 | 网上发过去的 | 服务器解析编译 |
|---|
「预先编译」是关键:解析和优化只做一次,往后每次调用都省下这一步。
它多一条硬规矩:函数体里必须有 RETURN。

存储函数由一组 SQL 加一些控制结构组成,执行完 RETURN 一个值出来。
| 谁 | 交出什么 |
|---|---|
| 存储过程 | 不一定有值 |
| 存储函数 | 必须一个值 |
「必须有返回值」这一条会带来什么限制?
复用、快、省网络、更安全,还能写分支和循环。

第五个好处最要紧:有了流程控制,SQL 才从查询语言变成能编程的语言。
真实项目里复杂的统计、报表、批量处理,常常就是一个存储过程。
把业务逻辑放进数据库,有什么代价?
参数、调用、返回值、能不能吐表、干什么用。

| 比什么 | 存储过程 | 存储函数 |
|---|
一句话记住:过程做事,函数算值。函数能嵌进 SELECT,过程只能 CALL。
过程不能有 RETURN,函数只有 IN 一种参数,调用方式也正好反了。