数据库原理与应用 第 15 章 · 上机一
课程第 15 章上机一 不改定界符改了再来课件那一段三种变量局部变量装回去连续练习 版式
第 15 章 存储过程与函数 · 上机一

分号断在哪儿,DELIMITER 说了算

课件第 8 到 20 页那三件事:注释与定界符、语句块、三种变量,一次全撞一遍。
已完成 0 / 6
本 次 上 机 题 目
  1. 01照课件的形状敲一遍,看它断在哪
  2. 02DELIMITER $$ 之后整段才算一句
  3. 03把例 15-1 原样敲进去
  4. 04@n、total、@@version 各是什么
  5. 05DECLARE 只能写在最前面
  6. 06把例 15-1 包成过程再跑一遍
  7. 从改定界符到调用,一趟走完
01
第 15 章 · 上机一

照课件的形状敲一遍,看它断在哪

分号还是结束符,这一段会被切成好几刀。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

第三行末尾有分号,MySQL 以为一句说完了,把半个 CREATE 送去执行。

打个比方

一句话说到一半被人接了下半句,接的人当然听不懂。

想一想

报错里 near 后面为什么是空的?

02
第 15 章 · 上机一

DELIMITER $$ 之后整段才算一句

结束符换成 $$,中间的分号就不再触发执行。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

敲下 END $$ 那一刻服务器才收到完整的一段,过程这才建得起来。

记牢它标准模板

  1. 开头改 $$
  2. 写 CREATE
  3. END $$
  4. 改回分号

想一想

最后那句 DELIMITER ; 不写会怎样?

03
第 15 章 · 上机一

把例 15-1 原样敲进去

课件第 34 页印的是一段裸的 BEGIN…END,直接敲跑不了。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

在 mysql> 里 BEGIN 是开一笔事务,后面跟着 IF 就成了语法错。

知道更多

语句块只活在存储过程和函数里,单独拿出来敲,MySQL 不认。

想一想

那这段代码该怎么改才跑得起来?

04
第 15 章 · 上机一

@n、total、@@version 各是什么

一个 @、不带 @、两个 @,是三样东西。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

@ 变量不用声明,没赋过值就是 NULL,断开连接就没了。

分清楚两种赋值

写法什么时候用
SET @n=1值是现成的
SELECT..INTO值要查出来

想一想

换一个人连进来,他看得到你的 @n 吗?

05
第 15 章 · 上机一

DECLARE 只能写在最前面

写在语句后面报 1064,忘了写会被当成系统变量。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

第一个报 1064,第二个建得起来,一调用才报 1193 认不得这个系统变量。

知道更多

报错不说「变量没声明」,是因为不带 @ 又没 DECLARE 的名字,MySQL 当系统变量找。

想一想

这两种错哪一种更难查?

06
第 15 章 · 上机一

把例 15-1 包成过程再跑一遍

同样几句话,装进 BEGIN…END 里就能跑了。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

s1 的两门课平均 89.25,走的是 THEN 那一支。

知道更多

@infor 是会话变量,过程结束它还在,所以外面再 SELECT 一次还看得到。

想一想

把 @infor 换成局部变量,外面还看得到吗?

第 15 章 · 上机一

从改定界符到调用,一趟走完

自己给一个系别,数出这个系有几个人。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

四个新东西一次用齐:定界符、语句块、局部变量、参数。

记牢它四件齐了

  1. 改定界符
  2. 开语句块
  3. 声明变量
  4. 接参数

想一想

把 dept 写成参数的好处是什么?

保山学院·人工智能教研室·曹鼎鼎