热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql存储过程函数触发器_mysql存储过程函数触发器

存储过程mysqldelimiter--这里为修改默认分隔符;mysqlCREATEPROCEDUREsimpleproc(OUTparam1INT)-BEGI

存储过程

mysql> delimiter //  -- 这里//为修改默认分隔符;

mysql> CREATE  PROCEDURE simpleproc (OUT param1 INT)

-> BEGIN

->   SELECT  COUNT(*) INTO param1 FROM t;

-> END//

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;      // -- 改回来这里的默认分隔符为;

这里调用试用call

mysql> CALL simpleproc(@a);

mysql> select @a;

函数demo

参数没有输入输出参数

mysql> CREATE  FUNCTION hello (s CHAR(20))

mysql> RETURNS  CHAR(50) DETERMINISTIC

-> RETURN  CONCAT(‘Hello, ‘,s,‘!‘);

这里调用试用 select,和普通函数一样了

mysql> SELECT hello(‘world‘);

+----------------+

| hello(‘world‘) |

+----------------+

| Hello, world!  |

+----------------+

变量的使用

declare last_month_start DATE;

DECLARE my_sql  INT  DEFAULT 10 ;

set var_name = 2;

流程控制

CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert`()

BEGIN

set @x=0;

ins :LOOP

set @x = @x +1;

if @x=100 then

leave ins;

end if;

insert into student (stuname) values (CONCAT("name",@x));

END LOOP ins;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert2`()

BEGIN

set @x=100;

ins :LOOP

set @x = @x +1;

if @x=120 then

leave ins;

elseif mod(@x,2) = 0 then

iterate ins;

end if;

insert into student (stuname) values (CONCAT("name",@x));

END LOOP ins;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `loop_demo`()

BEGIN

set @x=1 ,@x1=1;

repeat

set @x = @x +1;

until @x > 0 end repeat;

while @x1 

set @x1=@x1+1;

end while;

END

游标的使用

CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo`()

BEGIN

declare i_stuid int;

declare i_stuname varchar(20);

declare cur_stu cursor for select stuid,stuname from student;

declare exit handler for not found close cur_stu;

set @x1 = 0;

set @x2 = 0;

open cur_stu;

repeat

fetch cur_stu into i_stuid,i_stuname;

select i_stuid,i_stuname;

until 0 end repeat;

close cur_stu;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo3`()

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE a CHAR(16);

DECLARE b,c INT;

DECLARE cur1 CURSOR FOR SELECT stuname,stuid FROM `student`;

DECLARE cur2 CURSOR FOR SELECT subid FROM `subject`;

DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET done = 1;

OPEN cur1;

OPEN cur2;

REPEAT

FETCH cur1 INTO a, b;

FETCH cur2 INTO c;

IF NOT done THEN

SELECT a,b,c;

END IF;

UNTIL done END REPEAT;

CLOSE cur1;

CLOSE cur2;

END

触发器

必须建立在真实表之上,适合一些初始化数据

CREATE TABLE test1(a1 INT);

CREATE TABLE test2(a2 INT);

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

);

DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1

FOR EACH ROW BEGIN

INSERT INTO test2 SET a2 = NEW.a1;

DELETE FROM test3 WHERE a3 = NEW.a1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

END

|

DELIMITER ;

INSERT INTO test3 (a3) VALUES

(NULL), (NULL), (NULL), (NULL), (NULL),

(NULL), (NULL), (NULL), (NULL), (NULL);

INSERT INTO test4 (a4) VALUES

(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

查看索引

show index from table



推荐阅读
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
  • scrapy 采集入为库 mysql 数据库,只更新一个字段 提示这个语法错误?
    就是查询有没有这个字,如果查到这个字就更新这个字的bsmc字段表是news_topic插入代码如下: ... [详细]
  • 一基础代码检查    检查以bm_开头的系统初始化编码表是否有空值。与业务系统相关的编码项不能存在空值,会导致系统业务无法办理。为初始化数据表、在做测试数据和正式上线前检查。上线 ... [详细]
  • PHP操作MySql数据库_PHP教程:链接数据库$conn@mysql_connect(localhost,root,88888888)ordie(链接错误);解决中文乱码mys ... [详细]
  • python3连接外部Mysql
    前提条件,已经安装过MySQL(比如说以前web开发安装过MySQL)1.安装PyMySQLpipinstallPyMySQL2.测试1i ... [详细]
  • 一、路由首先需要配置路由,就是点击good组件进入goodDetail组件配置路由如下{path:goodDetail,component:goodDetail}同时在good组件中写入如下点击事件,路由中加入 ... [详细]
  • PHP连接MySQL的2种方法小结以及防止乱码【PHP】
    后端开发|php教程PHP,MySQL,乱码后端开发-php教程PHP的MySQL配置报错信息:ClassmysqlinotfoundinAnswer:1.在confphp.ini ... [详细]
author-avatar
手机用户2502876011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有