一、一个简单的入门例子
(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存储过程和函数 #### 1. 说明 ##### 1.1 手册适用范围 本手册适用于对MySQL存储过程...通过这些知识点的学习,可以帮助开发者更好地理解和应用MySQL存储过程和函数,从而提高应用程序的性能和安全性。
### MySQL核心技术学习笔记 #### 一、为什么要学习数据库 学习数据库的重要性主要体现在以下几个方面: 1. **持久化数据到本地**:数据库能够将应用程序产生的数据持久化存储在磁盘上,即使系统重启也不会丢失...
MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,提高了性能,还减少了网络流量,增强了安全性。以下是对存储过程的详细说明: **一...
- 存储过程和函数:预编译的SQL代码块,可重复使用,提高效率。 - 流程控制结构:如IF-ELSE、CASE、WHILE等,使SQL编程更灵活。 学习MySQL不仅涉及理论知识,还需要大量的实践操作来熟悉其语法和功能。掌握MySQL能...
这份“MySQL学习笔记”将引导我们深入理解其核心概念和实用技能。 一、MySQL简介 MySQL是一个开源、免费的数据库系统,由瑞典的MySQL AB公司开发,后被Oracle公司收购。它的设计目标是速度、可移植性和简洁性,支持...
MySQL是世界上最受欢迎的关系型数据库管理...以上只是MySQL学习笔记的一部分内容,实际的学习过程中,你还会接触到触发器、分区、复制、集群等更高级的主题。不断实践和深入研究,才能真正掌握这个强大的数据库系统。
这份"超经典mysql DBA学习笔记"涵盖了成为一名优秀DBA所需掌握的众多知识点,旨在帮助学习者深入理解MySQL数据库的运维与优化。 一、MySQL概述 MySQL是一种开源、免费的关系型数据库管理系统,广泛应用于互联网应用...
首先,"mysql学习笔记.doc"很可能是核心的学习资料,它可能包含了MySQL的基础概念、安装与配置、SQL语言基础、数据类型、数据库设计、表的创建与管理、索引、视图、存储过程、触发器、事务处理、备份与恢复、性能...
非常详细的某培训机构mysql学习笔记,内容系统全面,实用性强 MySQL1 MySQL基础 MySQ单实例部署 MySQL多实例部署 MySQL数据库操作 MySQL数据类型 MySQL存储引擎 MySQL表操作 MySQL2 MySQL数据操作 MySQL单...
MySQL 是一款广泛使用的开源关系型数据库管理系统,其学习笔记涵盖了多个关键知识点。以下是对这些知识点的详细解释: 1. **MySQL 体系架构** - **网络连接层**:处理客户端的连接请求,包括连接管理、认证和安全...
MYSQL知识学习过程笔记 在学习MYSQL之前,首先需要了解什么是数据库、数据库管理系统和SQL它们之间的关系是什么?数据库英文单词DataBase,简称DB,按照一定格式存储数据的一些文件的组合,顾名思义:存储数据的...
这份"与MySQL零距离接触学习笔记"无疑为初学者提供了一个深入了解MySQL的基础平台。 首先,笔记可能涵盖了MySQL的安装与配置。在Windows、Linux或MacOS等操作系统上安装MySQL通常涉及下载安装包,执行安装过程,并...
MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,还能提高执行效率,因为存储过程在首次创建时会被编译,之后的调用只需传入参数即可...
这份“超经典mysql dba学习笔记”包含了丰富的MySQL运维知识,对于想要深入理解和掌握MySQL DBA技能的人来说是一份宝贵的资料。 一、MySQL基础知识 在学习MySQL DBA之前,首先需要了解MySQL的基本概念,包括数据库...
这份"mySQL.zip_MYSQL_mysql 课件_学习笔记_笔记_资料"的压缩包内容包括了MySQL的培训课件和学习笔记,非常适合初学者进行数据库知识的入门学习。 51CTO下载-Mysql培训课件.pdf可能涵盖了以下MySQL的核心知识点: ...
MySQL DBA架构师学习笔记涉及了MySQL数据库的部署、配置、监控和优化等多方面的知识点。以下是对文件内容中提及知识点的详细说明: 1. MySQL部署规划:在进行MySQL数据库部署时,需要进行前期规划,确定软件包、...
MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...
### MySQL开发学习笔记知识点梳理 #### 一、基础知识概述 - **数据库定义**: 数据库(database)是用于存储数据的仓库,它可以高效地存储和处理数据。主要存储介质有两种:磁盘和内存(RAM)。 - **数据库分类**: - *...
MySQL学习笔记 数据库基础知识: * 数据库(DB):存储数据的容器。 * 数据库管理系统(DBMS):创建或管理数据库的软件,例如 MySQL、Oracle、SQL Server 等。 SQL 介绍: * 结构化查询语言(SQL):与数据库...