`
zxingchao2005
  • 浏览: 80493 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mysql存储过程学习笔记1

 
阅读更多

一、一个简单的入门例子

(1)创建表

<!--StartFragment-->CREATETABLE`users`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(30)DEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=9DEFAULTCHARSET=utf8

(2)创建存储过程

<!--StartFragment--> CREATEPROCEDURE`zxc`(outcntint)
begin
declaremaxidint;
selectmax(id)+1intomaxidfromusers;
insertintousersvalues(maxid,'hello');
selectcount(id)intocntfromusers;
end

(3)java代码调用存储过程zxc

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;
public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");
CallableStatement call=conn.prepareCall("{call zxc(?)}");
call.registerOutParameter(1, Types.INTEGER);
call.execute();
System.out.println(call.getInt(1));
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
}

}

}
二、存储过程常见语法

1.delimiter // 声明一个分隔符

2.drop procedure if exists pro_name ;//

3.IN example 输入的例子
mysql> CREATE PROCEDURE p5(p INT) SET @x = p //
Query OK, 0 rows affected (0.00 sec)
mysql> CALL p5(12345)//
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @x//
+-------+
| @x |
+-------+
| 12345 |
+-------+
1 row in set (0.00 sec)

4.OUT example 输出的例子

mysql> CREATE PROCEDURE p6 (OUT p INT)
-> SET p = -5 //
mysql> CALL p6(@y)//
mysql> SELECT @y//
+------+
| @y |
+------+
| -5 |
+------+

5.declare variable intdefault 1声明一个默认值是1的整形变量

6.if...then ...end if和if...then ...else ...end if

7.case 指令

case variable

when 0 then ...;

when 1 then ...;

...

else ...;

end case;

8.循环语句

(1)while ... end while

while a>5 do

...;

set a=a+1;

end while

(2)repeat...end repeat

repeat

...;

set a=a+1;

util a>=5

end repeat;

(2)loop...end loop

loop_label:loop

...;

set a=a+1;

if a>=5 then

level loop_label;

end if;

end loop;

(3)iterate loop_label 继续循环

(4)DECLARE HANDLER syntax 声明异常处理的语法
DECLARE
{ EXIT | CONTINUE }
HANDLER FOR
{ error-number | { SQLSTATE error-string } | condition }
SQL statement

例子:

CREATE TABLE t4 (s1 int,primary key(s1));//
CREATE PROCEDURE p23 ()
BEGIN
DECLARE CONTINUE HANDLER
FOR SQLSTATE '23000' SET @x2 = 1;
SET @x = 1;
INSERT INTO t4 VALUES (1);
SET @x = 2;
INSERT INTO t4 VALUES (1);
SET @x = 3;
END;//

三、游标

(1)声明游标

declare cursor_name cursor for select column from tablename;

(2)打开游标

open cursor_name;

(3)从游标里读取

fetch cursor_name into variable;

(4)关闭游标

close cursor_name;

例子:

DELIMITER //
CREATE PROCEDURE p25 (OUT return_val INT)
BEGIN
DECLARE a,b INT;
DECLARE cur_1 CURSOR FOR SELECT s1 FROM t;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET b = 1;
OPEN cur_1;
REPEAT
FETCH cur_1 INTO a;
UNTIL b = 1
END REPEAT;
CLOSE cur_1;
SET return_val = a;
END;//

CALL p25(@Y);
SELECT @Y;

(5)游标的特性

read only 只读属性

not scrollable 顺序读取

asensitive 敏感

fetch cursor1 into variable1;

update t1 set column='value' where current of cursor1;

游标也是不可以滚动的,只允许逐一读取下一行,不能在结果集中前进或后退

四、函数

1.入门
--求N的阶乘的函数
DELIMITER //
CREATE FUNCTION f (n INT) RETURNS INT(11)
BEGIN
DECLARE a INT DEFAULT 1;
WHILE n>0 DO
SET a=a*n;
SET n=n-1;
END WHILE;
RETURN a;
END;//

--根据出生日期求年龄的函数

<!--StartFragment-->

CREATEFUNCTIONf_age (in_dobdatetime)RETURNSint(11)
BEGIN
DECLAREl_ageINT;
IFDATE_FORMAT(NOW(),'00-%m-%d')>=DATE_FORMAT(in_dob,'00-%m-%d')THEN
SETl_age=DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(in_dob,'%Y');
ELSE
SETl_age=DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(in_dob,'%Y')-1;
ENDIF;
RETURN(l_age);
END

--字符串连接函数

CREATE PROCEDURE tables_concat
(OUT parameter1 VARCHAR(1000))
BEGIN
DECLARE variable2 CHAR(100);
DECLARE c CURSOR FOR
SELECT table_name FROM information_schema.tables;
DECLARE EXIT HANDLER FOR NOT FOUND BEGIN END; /* 1 */
SET sql_mode='ansi'; /* 2 */
SET parameter1 = '';
OPEN c;
LOOP
FETCH c INTO variable2; /* 3 */
SET parameter1 = parameter1 || variable2 || '.';
END LOOP;
CLOSE c;
END;

分享到:
评论

相关推荐

    MySQL视图及存储过程学习笔记

    MySQL视图及存储过程学习笔记

    精通MySQL存储过程和函数

    ### 精通MySQL存储过程和函数 #### 1. 说明 ##### 1.1 手册适用范围 本手册适用于对MySQL存储过程...通过这些知识点的学习,可以帮助开发者更好地理解和应用MySQL存储过程和函数,从而提高应用程序的性能和安全性。

    MySQL核心技术学习笔记

    ### MySQL核心技术学习笔记 #### 一、为什么要学习数据库 学习数据库的重要性主要体现在以下几个方面: 1. **持久化数据到本地**:数据库能够将应用程序产生的数据持久化存储在磁盘上,即使系统重启也不会丢失...

    Mysql存储过程学习笔记–建立简单的存储过程

    MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,提高了性能,还减少了网络流量,增强了安全性。以下是对存储过程的详细说明: **一...

    MySQL学习笔记 MySQL学习笔记

    - 存储过程和函数:预编译的SQL代码块,可重复使用,提高效率。 - 流程控制结构:如IF-ELSE、CASE、WHILE等,使SQL编程更灵活。 学习MySQL不仅涉及理论知识,还需要大量的实践操作来熟悉其语法和功能。掌握MySQL能...

    MySQL学习笔记.zip

    这份“MySQL学习笔记”将引导我们深入理解其核心概念和实用技能。 一、MySQL简介 MySQL是一个开源、免费的数据库系统,由瑞典的MySQL AB公司开发,后被Oracle公司收购。它的设计目标是速度、可移植性和简洁性,支持...

    mysql 个人学习笔记

    MySQL是世界上最受欢迎的关系型数据库管理...以上只是MySQL学习笔记的一部分内容,实际的学习过程中,你还会接触到触发器、分区、复制、集群等更高级的主题。不断实践和深入研究,才能真正掌握这个强大的数据库系统。

    mysql DBA学习笔记

    这份"超经典mysql DBA学习笔记"涵盖了成为一名优秀DBA所需掌握的众多知识点,旨在帮助学习者深入理解MySQL数据库的运维与优化。 一、MySQL概述 MySQL是一种开源、免费的关系型数据库管理系统,广泛应用于互联网应用...

    mysql学习笔记.rar

    首先,"mysql学习笔记.doc"很可能是核心的学习资料,它可能包含了MySQL的基础概念、安装与配置、SQL语言基础、数据类型、数据库设计、表的创建与管理、索引、视图、存储过程、触发器、事务处理、备份与恢复、性能...

    非常详细的某培训机构mysql学习笔记

    非常详细的某培训机构mysql学习笔记,内容系统全面,实用性强 MySQL1 MySQL基础 MySQ单实例部署 MySQL多实例部署 MySQL数据库操作 MySQL数据类型 MySQL存储引擎 MySQL表操作 MySQL2 MySQL数据操作 MySQL单...

    Mysql学习笔记.pdf

    MySQL 是一款广泛使用的开源关系型数据库管理系统,其学习笔记涵盖了多个关键知识点。以下是对这些知识点的详细解释: 1. **MySQL 体系架构** - **网络连接层**:处理客户端的连接请求,包括连接管理、认证和安全...

    MYSQL知识学习过程笔记

    MYSQL知识学习过程笔记 在学习MYSQL之前,首先需要了解什么是数据库、数据库管理系统和SQL它们之间的关系是什么?数据库英文单词DataBase,简称DB,按照一定格式存储数据的一些文件的组合,顾名思义:存储数据的...

    与MySQL零距离接触学习笔记

    这份"与MySQL零距离接触学习笔记"无疑为初学者提供了一个深入了解MySQL的基础平台。 首先,笔记可能涵盖了MySQL的安装与配置。在Windows、Linux或MacOS等操作系统上安装MySQL通常涉及下载安装包,执行安装过程,并...

    Mysql存储过程学习笔记--建立简单的存储过程

    MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,还能提高执行效率,因为存储过程在首次创建时会被编译,之后的调用只需传入参数即可...

    超经典mysql dba 学习笔记.zip

    这份“超经典mysql dba学习笔记”包含了丰富的MySQL运维知识,对于想要深入理解和掌握MySQL DBA技能的人来说是一份宝贵的资料。 一、MySQL基础知识 在学习MySQL DBA之前,首先需要了解MySQL的基本概念,包括数据库...

    mySQL.zip_MYSQL_mysql 课件_学习笔记_笔记_资料

    这份"mySQL.zip_MYSQL_mysql 课件_学习笔记_笔记_资料"的压缩包内容包括了MySQL的培训课件和学习笔记,非常适合初学者进行数据库知识的入门学习。 51CTO下载-Mysql培训课件.pdf可能涵盖了以下MySQL的核心知识点: ...

    MySQL DBA架构师学习笔记

    MySQL DBA架构师学习笔记涉及了MySQL数据库的部署、配置、监控和优化等多方面的知识点。以下是对文件内容中提及知识点的详细说明: 1. MySQL部署规划:在进行MySQL数据库部署时,需要进行前期规划,确定软件包、...

    MySQL学习笔记(含基础、运维、进阶三部分)

    MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...

    MYSQL开发学习笔记

    ### MySQL开发学习笔记知识点梳理 #### 一、基础知识概述 - **数据库定义**: 数据库(database)是用于存储数据的仓库,它可以高效地存储和处理数据。主要存储介质有两种:磁盘和内存(RAM)。 - **数据库分类**: - *...

    Mysql最全学习笔记

    MySQL学习笔记 数据库基础知识: * 数据库(DB):存储数据的容器。 * 数据库管理系统(DBMS):创建或管理数据库的软件,例如 MySQL、Oracle、SQL Server 等。 SQL 介绍: * 结构化查询语言(SQL):与数据库...

Global site tag (gtag.js) - Google Analytics