--存储过程及常用流程控制语法

/*该代码是创建了一个名叫"p4"的存储过程并设置了s1,s2,s3两个int型一个varchar型参数,还可以是其他数据类型,内部创建了x1,x2两个变量

DELIMITER是修改分隔符的

DELIMITER $$的意思是把默认分隔符";"换成"$$",这样分段写的存储过程就能整个被执行,而不是被当成多条sql语句单独执行

创建完过程再将分隔符改回成";"

两种创建变量并赋值的方式

SET @变量名 = 值;

SELECT 值 INTO @变量名;

使用变量前必须先运行该变量赋值语句

过程内部还可以通过 "DECLARE 变量名 类型(字符串型要加范围) DEFAULT 值;" 来创建变量,但如此创建的变量只能在该过程内部访问

存储过程只有三种类型参数 IN,OUT,INOUT

调用过程时过程有几个参数传几个参数,只是IN型的参数可以传的是变量,可以是常量,而OUT和INOUT型的参数传的必须是变量

传给out,inout参数的变量值会随着在过程中改变在外部也改变,而给in参数的变量外部值则不受过程内变量值改变的影响

*/DELIMITER $$

DROP PROCEDURE IF EXISTS `p4`$$

CREATE PROCEDURE `p4`(IN s1 INT,OUT s2 INT,INOUT s3 VARCHAR(10))

BEGIN

DECLARE x1 VARCHAR(10) DEFAULT 'this is x1';

DECLARE x2 VARCHAR(10) DEFAULT 'this is x2';

SET s1 = 11;

SET s2 = 22;

SET s3 = 'iss3';

/*if语法*/

IF s1 = 11 AND s2 = 12 THEN

SELECT s1,s2;

END IF;

IF s3 = 's3' OR s1 = s2 THEN

SELECT s3;

ELSE

SELECT s1,s2,s3;

END IF;

/*case语法*/

CASE s3

WHEN 's1' THEN

SELECT 'this is s1';

WHEN 's2' THEN

SELECT 'this is s2';

ELSE

SELECT 'this is s3';

END CASE;

/*while循环*/

WHILE s1>1 DO

SET s1=s1-1;

END WHILE;

SELECT s1;

/*repeat循环语句

与while不同的是while满足条件就执行,repeat始终执行直到满足条件终止

*/REPEAT

SET s1 = s1-1;

UNTIL s1=1

END REPEAT;

SELECT s1;

/*LOOP循环

LOOP没有循环条件,会不停的循环直到遇到 "LEAVE ZiDingYi;" "ZiDingYi"是自定义的LOOP标记*/

ZiDingYi:LOOP

SET s1 = s1+1;

IF s1 = 5 THENLEAVE ZiDingYi;

END IF;

END LOOP;

SELECT s1;

END$$

DELIMITER ;

SET @p_in=1;

SET @p_out=2;

SET @p_inout = 's3';

SELECT 'Hello World1' INTO @p_4;

/*调用存储过程*/

CALL p4(@p_in,@p_out,@p_inout);

SELECT @p_in,@p_out,@p_inout,@p_4;

/*存储过程如果只有一个语句则语句不用 begin...end包围

存储过程中可以直接使用外部定义的变量

存储过程中用set和select定义的变量就是全局的,执行该过程后内部用set和select定义的变量外部可以访问,其他过程也可以直接使用*/

CREATE PROCEDURE p1()   SET @var='p1';

CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@var);

CALL p1();

CALL p2();

SELECT @var;

CREATE PROCEDURE p3() SELECT CONCAT(@p3_var,' World');

SET @p3_var='Hello';

CALL p3();

/*删除存储过程*/

DROP PROCEDURE p4;

/*或者*/

DROP PROCEDURE IF EXISTS `p4`

/*查看该数据库下有哪些存储过程 test为数据库名*/

SELECT NAME FROM mysql.proc WHERE db='test';

/*或者*/SHOW PROCEDURE STATUS WHERE db='test';

/*查看存储过程详细信息,包括创建语句*/SHOW CREATE PROCEDURE p4;

--创建触发器(表里的触发器如果是触发本表,就会报错;触发其他的表就可以)

create trigger zl_tri after insert on zl_table

for each ROW

insert INTO zl_table1(Count) VALUES(2222);

--显示触发器

Show triggers [from 库名]

--删除触发器

DROP TRIGGER 库名.触发器名;

--集合

MySql只支持Union(并集)集合运算,好像也是4.0以后才有的;
但是对于交集Intersect、差集Except,就没有实现了。

--连接(和sql语法一样)

--基本语法(基本和sql语法一样,一下是不一样的地方)

select * from emp order by emp_sal desc limit 2; --limit相当于top

查看工资排名第2到第3的员工资料:

mysql> select * from emp order by emp_sal desc limit 1,2;

使用rand()抽样调查,随机抽取2个员工,查看其资料

mysql> select * from emp order by rand() limit 2;

--mysql event事件

  MySQL 5.1推出新特性——Event Scheduler,可以定时执行一些任务,给开发带来极大的便利。如果要使用Event Scheduler,首先检查是否启用了Event scheduler,如下:

  mysql> select @@event_scheduler;
  mysql> show variables like 'event_scheduler';
  如果没有开启,开启它。
  mysql> set GLOBAL event_scheduler=ON;
  或
  mysql> set GLOBAL event_scheduler=1;
  我们先创建一个表
  mysql> delimiter //
  mysql> create table t_event (event_id int not null auto_increment primary key, created timestamp);
  //
  创建event
  mysql> create event e_insert on schedule every 5 second starts timestamp '2010-01-12 23:22:00' enable do
  insert into t_event (created) values(current_timestamp);
  //

  失效

  mysql> alter event e_insert disable;

mysql常用知识点的更多相关文章

  1. mysql常用知识点之limit

    limit函数的应用.limit后面跟整数,如limit 5,表示在结果集中取前5条:limit后跟整数区间,如limit 2,5,表示在结果集中 从第3条开始,取5条数据,第一个整数表示结果集的顺序 ...

  2. JAVA常用知识点及面试题总结

    1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...

  3. mysql常见知识点总结

    mysql常见知识点总结 参考: http://www.cnblogs.com/hongfei/archive/2012/10/20/2732516.html https://www.cnblogs. ...

  4. MYSQL初级学习笔记一:MYSQL常用命令和数据库操作(DDL)!(视频序号:初级_3,4)

    知识点一:MYSQL常用命令(3) 登入方法:一,mysql –u 账号 –p 密码 退出方法:一,EXIT,QUIT 修改MYSQL命令提示符: 连接上客户机之后,通常使用prompt命令修改: 连 ...

  5. 可能是全网最好的MySQL重要知识点 | 面试必备

    可能是全网最好的MySQL重要知识点 | 面试必备  mp.weixin.qq.com 点击蓝色“程序猿DD”关注我 回复“资源”获取独家整理的学习资料! 标题有点标题党的意思,但希望你在看了文章之后 ...

  6. MySQL重要知识点

    可能是全网最好的MySQL重要知识点 |  mp.weixin.qq.com 点击蓝色“程序猿DD”关注我 回复“资源”获取独家整理的学习资料! 标题有点标题党的意思,但希望你在看了文章之后不会有这个 ...

  7. Mysql常用sql语句(一)- 操作数据库

    21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...

  8. Mysql常用sql语句(二)- 操作数据表

    21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...

  9. sql注入原理+mysql相关知识点

    什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...

随机推荐

  1. iOS App中数据加载的6种方式

    我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以 ...

  2. STL源码分析读书笔记--第5章--关联式容器

    1.关联式容器的概念 上一篇文章讲序列式容器,序列式容器的概念与关联式容器相对,不提供按序索引.它分为set和map两大类,这两大类各自有各自的衍生体multiset和multimap,的底层机制都是 ...

  3. PHPCURL直接访问JSONRPC服务

    <?php $ch = curl_init(); $url = 'http://localhost/jsonrpc?tm='.time().mt_rand (100,999); //参数是为了防 ...

  4. JavaScript之Object

    两种简单的JavaScript中定义对象的方式: 在JavaScript中,可以动态添加对象的属性,也可以动态删除对象的属性. var object=new object(); //alert(obj ...

  5. 第一百九十六天 how can I 坚持

    老妈邮的咸菜到了,美味啊,买不到,哈哈. 以后要勤给鱼换水啊,10天不换,水都臭了,拒绝懒惰. 明天要回济南了,刘松结婚,估计又没法发博客了. 两条鱼,一条罗娜,一条我,哈哈. 睡觉.

  6. 在VS2013中使用水晶报表

    又遇到了在B/S系统中打印,打印格式要求比较高,打印出的效果要求高大上.用VS2013中微软自带的报表,实在难以实现应用的效果,主要问题表现在: 1.不能插入用Word做好的打印模板,自己按照模板来做 ...

  7. C++ 中vector的基本用法

    //在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少 基本概念 vector容器是一个模板类,可以存放任何类型的对象).vector对象可以在运行时高效地添加元素,并且vector中元素是 ...

  8. Java沙箱技术

    自从Java技术出现以来,有关Java平台的安全性及由Java技术发展所引发的新的安全性问题,引起了越来越多的关注.目前,Java已经大量应用在各个领域,研究Java的安全 性对于更好地使用Java具 ...

  9. hdu 5424 Rikka with Graph II (BestCoder Round #53 (div.2))(哈密顿通路判断)

    http://acm.hdu.edu.cn/showproblem.php?pid=5424 哈密顿通路:联通的图,访问每个顶点的路径且只访问一次 n个点n条边 n个顶点有n - 1条边,最后一条边的 ...

  10. System.Data.SqlTypes.SqlNullValueException: 数据为空。不能对空值调用此方法或

    有可能读出的数据为NULL,可以这样改: 方法一:while (reader.Read()){ for (int i = 0; i < 7; i++) { if (reader.IsDBNull ...