我们写 SQL 的时候,MySQL 怎么判断 SQL 是否已经结束了,可以去执行了?

需要一个结束符,当 MySQL 看到这个结束符的时候,表示可以执行前面的语句了,MySQL 默认以分号为结束符。

当我们创建存储过程或者自定义函数的时候,写了很大一片 SQL,里面包含了很多分号,但是整个代码语句是一个整体,不能让 MySQL 读到分号就立即去执行,这样肯定是不行的。我们需要完整的代码语句一起执行才行。所以此时我们就不可以用分号作为结束符了,必须另外声明结束符。

delimiter 关键字就是用来自定义结束符的,请参考下面的示例:

mysql> /*创建表test1*/
mysql> drop table IF EXISTS test1;
Query OK, 0 rows affected (0.01 sec)mysql> create table test1(a int PRIMARY KEY,b int);
Query OK, 0 rows affected (0.01 sec)mysql>
mysql> /*声明脚本的结束符为$$*/
mysql> DELIMITER $$
mysql> DROP PROCEDURE IF EXISTS proc1;-> CREATE PROCEDURE proc1()-> BEGIN->   /*声明了一个局部变量*/->   DECLARE v_a int;->->   select ifnull(max(a),0)+1 into v_a from test1;->   select @v_b:=v_a*2;->   insert into test1(a,b) select v_a,@v_b;-> end $$
Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql>
mysql> /*声明脚本的结束符为;*/
mysql> DELIMITER ;
mysql>
mysql> /*调用存储过程*/
mysql> call proc1();
+-------------+
| @v_b:=v_a*2 |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)Query OK, 1 row affected (0.01 sec)mysql> /*查看结果*/
mysql> select * from test1;
+---+------+
| a | b    |
+---+------+
| 1 |    2 |
+---+------+
1 row in set (0.00 sec)

声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?相关推荐

  1. mysql 触发器采坑记录(mysql 触发器采坑记录 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行。 当创建触发器(视图、存储过程、函数)时,如果没有)

    mysql 触发器采坑记录(语序有点凌乱,回头再整理) 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行. 当创建触发器(视图.存储过程.函数)时,如果没有指定创建 ...

  2. mysql 定义存储过程_mysql——定义——存储过程和函数——概念

    存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在服务器中 一.创建存储过程 语法格式: create procedure sp_name ( [ proc_ ...

  3. Python 在定义函数时 为什么默认参数不能放在必选参数前面

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 直接定义 ...

  4. 函数c语言表示_C语言定义无参数的函数时,f()和f(void)有什么区别?

    相信C语言初学者常会在前辈留下的项目,或者一些开源项目中看到以 void 作为参数的函数,例如 void fun(void),虽然我们都明白在C语言中,"void"表示空,但是按理 ...

  5. Oracle 存储过程,函数和包。

    1. 存储过程和函数 1.1 创建和删除存储过程             创建存储过程,需要有CREATE PROCEDURE 或 CREATE ANY PROCEDURE的系统权限. 基本语法如下: ...

  6. 争议?MySQL存储过程与函数,封装,体,完整详细可收藏

    文章目录 1. 存储过程概述 2. 创建存储过程 3. 调用存储过程 4. 存储函数的使用 5. 存储过程和函数的查看.修改.删除 6. 关于存储过程使用的争议 MySQL从5.0版本开始支持存储过程 ...

  7. MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器

    第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...

  8. 视图存储过程存储函数

    文章目录 视图 常见数据库对象 视图概述 为什么使用视图? 视图的理解 创建视图 创建单表视图 创建多表联合视图 基于视图创建视图 查看视图 更新视图的数据 一般情况 不可更新的视图 修改.删除视图 ...

  9. 第15章_存储过程与函数(创建存储过程、调用存储过程、存储函数的使用、存储过程和函数的查看、修改、删除)

    第15章_存储过程与函数 第15章_存储过程与函数 1. 存储过程概述 1.1 理解 1.2 分类 2. 创建存储过程 2.1 语法分析 2.2 代码举例 3. 调用存储过程 3.1 调用格式 3.2 ...

最新文章

  1. BUUCTF-WEB:[极客大挑战 2019]EasySQL 1(收藏了URL编码表)
  2. mysql order by基于时间的盲注
  3. git 简易指南+常用命令
  4. jsoncpp判断Value中是否含有指定的key
  5. 数据挖掘应用的一些场景和对应算法
  6. python中的for语句可以在任意序列_python在循环内任意增加迭代器
  7. UVa 11572 Unique snowflakes【滑动窗口】
  8. 简明python教程最新pdf_《简明Python教程》PDF高清 初学者的极佳教材 限时免费领取...
  9. 思维导图制作工具BLUMIND 小巧免激活 免安装 仅2M
  10. wincap函数用法简述
  11. 【渗透测试实战】—社会工程学利用详解
  12. php7 pecl安装,PHP7安装pecl:memcached扩展
  13. 华为hn–wx9x笔记本电脑_华为荣耀9怎样无线连接电脑。
  14. acm-LCY算法入门培训-第0讲
  15. 测试工程师前途-(工资待遇、发展方向探讨)
  16. web前端之CSS3
  17. Android 支持表情功能
  18. 在阿里“救了八年火”的程序猿,这样讲述淘宝的技术进化史
  19. Semantic UI 之 表格 table
  20. 第094讲: Pygame:飞机大战5 | 学习记录(小甲鱼零基础入门学习Python)

热门文章

  1. starter_您是否尝试过MicroProfile Starter?
  2. java jvm虚拟机_Java虚拟机(JVM)简介
  3. 单例嵌套 ios_嵌套类型的前5个用例
  4. REST /使用提要发布事件
  5. Spring@懒惰注释
  6. singleton设计模式_Java Singleton设计模式
  7. 同时使用传入和传出连接时,相互TLS身份验证存在Java问题
  8. java ee cdi_Java EE CDI依赖关系消歧示例
  9. 26.0.0-alpha1_WildFly 8.0.0.Alpha1的发布和一些历史
  10. 使用Spring Boot构建RESTFul服务