以下是小编给大家收集的读书笔记MySQL存储过程存储函数,本文共14篇,欢迎大家前来参阅。

篇1:读书笔记MySQL存储过程存储函数
存储函数和存储过程不同的地方有以下几点:
1.函数的参数列表中模式只能为IN,
2.函数必须返回一个值,它的类型被定义于函数的头部
3.函数能被SQL语句所调用
4.函数可能不返回任何结果集
DELIMITER $$
DROP FUNCTION IF EXISTS discount_price$$
CREATE FUNCTION discount_price
normal_price NUMERIC(8, 2)
RETURN NUMERIC(8, 2)
DETERMINISTIC
BEGIN
DECLARE v_discount_price NUMERIC(8, 2);
IF (normal_price >500) THEN
SET discount_price = normal_price * .8;
ELSE IF (normal_price >1000) THEN
SET discount_price = normal_price * .9;
ELSE
SET discount_price = normal_price;
END IF;
RETURN (discount_price);
END$$
篇2:mysql循环存储过程
mysql循环存储过程
利用存储过程执行一批语句
DELIMITER $$
DROP PROCEDURE IF EXISTS `proc1`$$
CREATE PROCEDURE `proc1`
BEGIN
declare i integer;
set i=0;
while i<=100 do
begin
set @TABLENAME=CONCAT('update ','sns_userinfo_ext_',i,' set mobile_flag=1,mail_flag=1;');
PREPARE STMT FROM @TABLENAME;
EXECUTE STMT;
SET i=i+1;
end;
end while;
END$$
call ff()
篇3:mysql存储过程加速
首先看一个存储过程,这个存储过程是为了构造数据使用的,当然贴出来的存储过程简化了一些不必要的表结构。
CREATE PROCEDURE modifyRootEntry()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE userId INT;
DECLARE userIdIter CURSOR FOR SELECT DISTINCT user_id from entries;
OPEN userIdIter;
read_loop: LOOP
FETCH userIdIter INTO userId;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO entries (id, name, user_id, parent_id) VALUES(0, 'root_parent', userId, 0);
UPDATE entries SET parent_id=0 where user_id=userId AND name='file_root' AND parent_id is NULL;
END LOOP;
CLOSE userIdIter;
END;
CREATE PROCEDURE modifyRootEntry()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE userId INT;
DECLARE userIdIter CURSOR FOR SELECT DISTINCT user_id from entries;
START TRANSACTION; // here !
OPEN userIdIter;
read_loop: LOOP
FETCH userIdIter INTO userId;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO entries (id, name, user_id, parent_id) VALUES(0, 'root_parent', userId, 0);
UPDATE entries SET parent_id=0 where user_id=userId AND name='file_root' AND parent_id is NULL;
END LOOP;
CLOSE userIdIter;
COMMIT;// here !
END;
UPDATE entries SET parent_id=0 where user_id=userId AND name='file_root' AND parent_id is NULL;
CREATE PROCEDURE modifyRootEntry()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE userId INT;
DECLARE userIdIter CURSOR FOR SELECT DISTINCT user_id from entries;
START TRANSACTION; // here !
OPEN userIdIter;
read_loop: LOOP
FETCH userIdIter INTO userId;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO entries (id, name, user_id, parent_id) VALUES(0, 'root_parent', userId, 0);
END LOOP;
UPDATE entries SET parent_id=0 where user_id=userId AND name='file_root' AND parent_id is NULL; // here!
CLOSE userIdIter;
COMMIT;// here !
END;
CREATE PROCEDURE pFastCreateNums (cnt INT UNSIGNED)
BEGIN
DECLARE s INT UNSIGNED DEFAULT 1;
TRUNCATE TABLE Nums;
INSERT INTO Nums SELECT s;
WHILE s*2 <= cnt DO
BEGIN
INSERT INTO Nums SELECT a+s FROM Nums;
SET s = s*2;
END;
END WHILE;
END;
篇4:如何测试mysql触发器和存储过程
-03-03mysql 字符串函数收集比较全
-08-08MySQL 有输入输出参数的存储过程实例
-04-04MySQL查询优化:连接查询排序limit(join、order by、limit语句)介
2013-05-05基于mysql事务、视图、存储过程、触发器的应用分析
-03-03mysql 跨表查询、更新、删除示例
2010-11-11mysql的日期和时间函数
-11-11MySQL优化全攻略-相关数据库命令
-07-07you *might* want to use the less safe log_bin_trust_function
2013-11-11mysql获取字符串长度函数(CHAR_LENGTH)
2013-05-05MySQL笔记之修改数据的解决方法
篇5:如何测试mysql触发器和存储过程
最近更 新
mysql中IFNULL,IF,CASE的区别介绍
解决远程连接mysql很慢的方法(mysql_conn
MySQL 相关的环境变量
MySQL笔记之运算符使用详解
jdbc调用mysql存储过程实现代码
mysql执行时间为负数的原因分析
Mysql在debian系统中不能插入中文的终极解
关于mysql innodb count(*)速度慢的解决办
Last_Errno: 1062,Last_Error: Error Du
MySQL无法启动1067错误的又一种解决方法(
热 点 排 行
mysql安装图解 mysql图文安装教程
超详细mysql left join,right jo
Can''t connect to MySQL server
Mysql命令行导入sql数据
MYSQL 数据库导入导出命令
Mysql字符串截取函数SUBSTRING的
MySQL数据库备份与恢复方法
MySQL server has gone away 问题
windows下mysql忘记root密码的解
MySQL日期数据类型、时间类型使用
篇6:mysql使用存储过程制造测试数据
,
解开香罗带,剥得赤条条。插上一根销儿也,把奴浑身上下来咬。'),0,10013,now);
END WHILE;
END
上面是代码:
说明:test是我的数据库,message是我的表,还有,今天心情一点都不好.
调用的时候请用下面:
[html]
use test;
delete from message;
call message_insert_procedure(10000000);
中间的一句 delete from message ; 如果你用的是workbench这类的软件,这句话是报错的,请在workbench的performance的sql queries 选项内,把 General子项下面的 “Safe Updates” 钩掉 , 然后 reconnect 一下就完事了.
数据测试:Ubuntu 12.10 下mysql ,数据测是1000W条 548秒.
篇7:存储过程入门
这一篇要总结的是存储过程,包括存储过程有哪几种,如何创建,以及最后如何调用存储过程,所以分为以下几个方面进行总结。
1,不带参数的存储过程
2,带输入参数的存储过程
3,带输入和输出参数的存储过程
4,带返回值的存储过程
不带参数的存储过程
例如,以下存储过程返回Employees表中所有职员的记录,
存储过程代码:
USE TSQLFundamentals;GOIF OBJECT_ID('usp_ProcDemoNoParam','P') IS NOT NULL DROP PROC usp_ProcDemoNoParam;GO-- 1,不带参数CREATE PROC usp_ProcDemoNoParamASBEGIN SELECT * FROM HR.Employees;ENDGO
调用代码:
USE TSQLFundamentals2008;GO-- 1,不带参数存储过程的调用EXEC usp_ProcDemoNoParam;
结果:
篇8:浅谈触发器和存储过程
触发器: 基本表在被修改的时候通过事件触发而执行的存储过程。(被动)
作用是保证了由主键和外键所不能保证的参照完整性和数据完整行。
存储过程: 一种数据库对象,将负责不同功能的语句分类封装好,以便反复调用。(主动)
篇9:浅谈触发器和存储过程
触发器:
1:实现比约束更复杂的数据的完整性
2:返回自定义的错误信息
3:实现多张表的连级修改
存储过程:
1:语句封装,可多次调用,just like 面向对象
2:执行速度更快(存储过程第一次执行便被分析优化)
3:保证数据安全(系统管理员可对存储过程进行权限限制)
篇10:浅谈触发器和存储过程
1:触发器是一个被动的执行过程,更像是一个保护机制,当我的某个数据库的某条数据被修改的时候我预先写好的触发器就这样被触发了,然后他就会通过主外键约束来对其他表的数据进行合理修改以满足整个数据的完整性,
而存储过程却是一个十足的积极主动能手,主动把SQL语句分类封装,就像我们在机房收费的时候封装的方法,我写好了有类似的需求直接调用就可以了。
2:触发器和存储过程都是数据库这个层面上进行的操作和修改,可以说基本跟我们要实现的软件代码没半毛钱关系,这样也是符合分层思想的,而且有利于后期系统的维护和修改。如果哪个功能块需求变更我们可能只需要修改数据库里的存储过程或者触发器而不用打开大段的代码去修改SQL语句。
3:两者都从不同方面保护了数据,触发器可以保护数据的完整性,而存储过程则是通过权限管理维护数据的安全。
篇11:存储过程同函数的区别
SQL SERVER中:
本质上没区别,只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。
函数限制比较多,比如不能用临时表,只能用表变量。还有一些函数都不可用等等。而存储过程的限制相对就比较少
1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3. 存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译,
Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。
sql server中总结的用法大部分适用于Oracle,在具体的使用过程中,还要看系统实现的复杂程度和实际情况。有经验的DBA对于这两者的运用应该已经了然于胸.
篇12:Mroonga MySQL存储引擎
Mroonga是一个MySQL存储引擎,基于groonga全文搜索引擎,
Mroonga MySQL存储引擎
,
它采用在MySQL 5.1和更高版本中的插件式存储引擎接口。
项目主页:www.open-open.com/lib/view/home/1356832544041
篇13:[MySQL]浅谈InnoDB存储引擎
InnoDB是事务安全的存储引擎,设计上借鉴了很多Oracle的架构思想,一般而言,在OLTP应用中,InnoDB应该作为核心应用表的首先存储引擎,InnoDB是由第三方的Innobase Oy公司开发,现已被Oracle收购,创始人是Heikki Tuuri,芬兰赫尔辛基人,和著名的Linux创始人Linus是校友。
InnoDB体系架构
上面是InnoDB的一个简图,简单来说,InnoDB是由一系列后台线程和一大块内存组成。
后台线程
默认情况下,InnoDB的后台线程有7个 —— 4个IO thread, 1个master thread, 1个lock monitor thread, 一个error monitor thread
内存
InnoDB的内存主要有以下几个部分组成:缓冲池 (buffer pool)、重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool),如下图所示:
其中缓冲池占最大块内存,用来缓存各自数据,数据文件按页(每页16K)读取到缓冲池,按最近最少使用算法(LRU)保留缓存数据。
缓冲池缓冲的数据类型有:数据页、索引页、插入缓冲、自适应哈希索引、锁信息、数据字典信息等,其中数据页和索引页占了绝大部分内存。
日志缓冲将重做日志信息先放入这个缓冲区,然后按一定频率(默认为1s)将其刷新至重做日志文件。
Master 后台线程
InnoDB的主要工作都是在一个单独的Master线程里完成的。Master线程的优先级最高,它主要分为以下几个循环:主循环(loop)、后台循环(background loop)、刷新循环(flush loop)、暂停循环(suspend loop),
先来看看主循环,下面是它的伪代码:
[plain]
void master_thread (
loop:
for (int i =0; i <10; i++){
do thing once per second
sleep 1 second if necessary
}
do things once per ten seconds
goto loop;
}
其中每秒一次的操作包括:www.dnzg.cn
刷新日志缓冲区(总是)
合并插入缓冲(可能)
至多刷新100个脏数据页(可能)
如果没有当前用户活动,切换至background loop (可能)
和Oracle类似,即使事务未提交,也会每秒刷新重做日志缓冲区。
其中每10秒一次的操作包括:
合并至多5个插入缓冲(总是)
刷新日志缓冲(总是)
刷新100个或10个脏页到磁盘(总是)
产生一个检查点(总是)
删除无用Undo 页 (总是)
接着来看后台循环,若当前没有用户活动或数据库关闭时,会切换至该循环执行以下操作:
删除无用的undo页(总是)
合并20个插入缓冲(总是)
跳回到主循环(总是)
不断刷新100个页,直到符合条件跳转到flush loop(可能)
如果flush loop中也没有什么事情可做,边切换到suspend loop,将master线程挂起。
篇14:python连接mysql调用存储过程示例
最近更 新
使用python实现扫描端口示例
Python字符串的encode与decode研究心得乱
2款Python内存检测工具介绍和使用方法
python翻译软件实现代码(使用google api完
python正则表达式判断字符串是否是全部小
python解决字典中的值是列表问题的方法
Python 时间处理datetime实例
python 输出一个两行字符的变量
pyqt和pyside开发图形化界面
Python FTP操作类代码分享
热 点 排 行
Python入门教程 超详细1小时学会
python 中文乱码问题深入分析
比较详细Python正则表达式操作指
Python字符串的encode与decode研
Python open读写文件实现脚本
Python enumerate遍历数组示例应
Python 深入理解yield
Python+Django在windows下的开发
python 文件和路径操作函数小结
python 字符串split的用法分享
文档为doc格式