存储过程

Mysql分页存储过程

梦想与她 提交于 2020-01-21 08:51:31
CREATE PROCEDURE `prc_query`( IN p_table_name VARCHAR(2000), IN p_fields VARCHAR(3000), IN p_where_string VARCHAR(8000), IN p_group_string VARCHAR(3000), IN p_order_string VARCHAR(3000), IN p_page_now INTEGER, IN p_page_size INTEGER, OUT p_total_records INTEGER, OUT p_total_pages INTEGER ) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '分页存储过程' BEGIN #定义变量 DECLARE m_begin_row INT DEFAULT 0; DECLARE m_limit_string CHAR(64); #构造语句 SET m_begin_row = (p_page_now - 1) * p_page_size; SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ', ', p_page_size); #如果页索引和页大小都为0,则返回所有数据 IF p_page

mysql分页存储过程

陌路散爱 提交于 2020-01-21 08:45:03
CREATE PROCEDURE CommonPageProc( IN p_tablename VARCHAR(1024), IN p_fields VARCHAR(1024), IN p_pagesize INT, IN p_pageindex INT, IN p_orderfield VARCHAR(128), IN p_sqlwhere VARCHAR(1024), OUT p_totalrecord INT ) NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT '分页存储过程' BEGIN /*定义变量*/ DECLARE m_begin_row INT DEFAULT 0; DECLARE m_limit_string CHAR(64); /*构造语句*/ SET m_begin_row = (p_pageindex - 1) * p_pagesize; SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ',', p_pagesize); if (p_sqlwhere<>'' ) THEN set p_sqlwhere=concat(' where ',p_sqlwhere); end if; if p_orderfield<>'' then set p_orderfield

小题大做之MySQL 5.0存储过程编程入门

独自空忆成欢 提交于 2020-01-21 00:15:10
MySQL 版本: 5.0.45 p hpMyAdmin 版本: 2.11.3 首先看 MySQL 5.0 参考手册中关于创建存储过程的语法说明: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([ proc_parameter [,...]]) [ characteristic ...] routine_body proc_parameter : [ IN | OUT | INOUT ] param_name type type : Any valid MySQL data type characteristic : LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT ' string ' routine_body : Valid SQL procedure statement 如果你对 MySQL 还不太熟悉的话,单单看这个语法结构当然不足以进行 MySQL 存储过程编程。我之前基本都是使用 MS SQL SERVER ,所以以下记录我熟悉 MySQL

mysql存储过程游标嵌套循环

落爺英雄遲暮 提交于 2020-01-21 00:13:10
自己写的一个mysql存储过程如下: BEGIN DECLARE _did bigint(20); DECLARE _count int; DECLARE s1 int; DECLARE cur_1 CURSOR FOR select id from info; /** 声明游标,并将查询结果存到游标中 **/ /** 获取查询数量 **/ SELECT count(id) into _count from info; SET s1=1; START TRANSACTION;#开启事务 open cur_1;#打开游标 while s1<_count+1 DO FETCH cur_1 INTO _did; -- 嵌套使用游标 BEGIN #声明变量 DECLARE token int DEFAULT 0; DECLARE _d int; DECLARE _t int; DECLARE _bdate datetime; #定义一个游标 DECLARE cur_2 CURSOR FOR select rr.da,rr.ts from rr left join info di on di.r_id = rr.id where di.id = _did; DECLARE CONTINUE HANDLER FOR NOT FOUND SET token=1; #开始循环游标 open cur

Mysql 存储过程查询结果赋值到变量的方法

喜欢而已 提交于 2020-01-21 00:06:21
drop table if exists test_tbl; create table test_tbl (name varchar(20), status int(2)); insert into test_tbl values('abc', 1),('edf', 2),('xyz', 3); drop procedure IF EXISTS pro_test_3; delimiter // create procedure pro_test_3() begin -- 方式 1 DECLARE cnt INT DEFAULT 0; select count(*) into cnt from test_tbl; select cnt; -- 方式 2 set @cnt = (select count(*) from test_tbl); select @cnt; -- 方式 3 select count(*) into @cnt1 from test_tbl; select @cnt1; -- 多个列的情况下似乎只能用 into 方式 select max(status), avg(status) into @max, @avg from test_tbl; select @max, @avg; end // delimiter ; call pro_test_3();    来源

Java面试题整理十之数据库

不羁岁月 提交于 2020-01-20 22:24:49
目录 91. 触发器的作用? 92. 什么是存储过程,用什么来调用? 93. 存储过程的优缺点? 94. 索引的作用,它的优缺点? 95. 什么是事务,什么是锁? 96. 列举几种表连接的方式,它们有什么区别? 97. 主键和外键的区别? 98. 在数据库中查询语句速度很慢,如何优化? 99. 数据库三范式是什么? 100. Oracle和MySQL的区别? 91. 触发器的作用? 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 92. 什么是存储过程,用什么来调用? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。 93. 存储过程的优缺点? 优点: 存储过程是预编译过的,执行效率高。 存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 安全性高,执行存储过程需要有一定权限的用户。 存储过程可以重复使用,可减少数据库开发人员的工作量。

MYSQL之视图、触发器、事务

北城余情 提交于 2020-01-20 22:18:51
一 视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----------------+ | 1 | 张磊老师 | | 2 | 李平老师 | |

MySQL SQL优化

匆匆过客 提交于 2020-01-20 15:47:38
SQL优化大全 索引优化 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select id from t where num=10 union all select id from t where num=20 http://5.in 和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3 6

存储过程(SQL SERVER 2008)

人走茶凉 提交于 2020-01-20 08:09:23
一 、实验题目:存储过程 二、 实验目的:熟悉存储过程的定义和使用,熟练运用 select ,update ,insert ,delete 命令完成对学生信息数据库的查询、更新、添加、删除操作。 题目六: 药品(编号,名称,价格,厂商) 处方(药品编号,数量,医生编号) 医生 (编号,姓名,科室,职称) 根据上面基本表的信息定义一个存储过程,完成下面功能: 入口参数:药品编号 1 显示药品信息 2 如果没有处方开此药,删除该药品记录 3 如果价格高于10元,降价至10元。 所测试的数据: INSERT INTO 医生 ( 编号 , 姓名 , 科室 , 职称 ) VALUES ( '1001' , '张三' , '外科' , '主刀医师' ) , ( '1002' , '李四' , '内科' , '主任医师' ) , ( '1003' , '王五' , '小儿科' , '主治医师' ) , ( '1004' , '王二' , '眼科' , '主任医师' ) , ( '1005' , '赵六' , '妇科' , '主刀医师' ) , ( '1006' , '张力' , '内科' , '副主任医师' ) , ( '1007' , '张力' , '骨科' , '主刀医师' ) ; select * from 医生 INSERT INTO 药品 ( 编号 , 名称 , 价格 , 厂商 )

存储过程详解

有些话、适合烂在心里 提交于 2020-01-20 06:43:46
存储过程简介 什么是存储过程 :存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。 存储过程的好处 : 1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。 2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。 小结:总之存储过程是好东西,在做项目时属于必备利器,下面介绍存储过程的基本语法。 存储过程的语法和参数讲解 存储过程的一些基本语法: --------------创建存储过程----------------- CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS