当前位置: 首页 > news >正文

建设安全带官方网站淄博电商网站建设

建设安全带官方网站,淄博电商网站建设,贵州 做企业网站的流程,网站建设的竞争对手的分析目录 1. 游标1.1 声明游标1.2 打开游标1.3 读取游标1.4 关闭游标1.5 游标示例 2. 触发器2.1 创建触发器2.2 修改触发器2.3 删除触发器2.4 触发器类型2.5 触发器示例 参考书籍 1. 游标 游标一般和存储过程一起配合使用。 1.1 声明游标 要使用游标#xff0c;需要用到 DECLAR… 目录 1. 游标1.1 声明游标1.2 打开游标1.3 读取游标1.4 关闭游标1.5 游标示例 2. 触发器2.1 创建触发器2.2 修改触发器2.3 删除触发器2.4 触发器类型2.5 触发器示例 参考书籍 1. 游标 游标一般和存储过程一起配合使用。 1.1 声明游标 要使用游标需要用到 DECLARE CURSOR 语句 DECLARE 游标名 CURSOR FOR SELECT语句注一个存储过程可以声明多个游标但是一个块中的每一个游标必须具有唯一的名字。 1.2 打开游标 要使用游标需要用到 OPEN 语句 OPEN 游标名;1.3 读取游标 要使用游标需要用到 FETCH...INTO 语句 FETCH 游标名 INTO 变量名, ...1.4 关闭游标 要使用游标需要用到 CLOSE 语句 CLOSE 游标名;注游标使用完以后要 及时关闭 1.5 游标示例 【例】在数据库 score 中查询某个学院某门课程的成绩方法一 drop PROCEDURE if EXISTS p1; delimiter $ create PROCEDURE p1(in did char(10), in lid char(10)) begindeclare stu_id char(15);declare lname char(20);declare stu_score int;declare score_count int; # 统计记录数declare i int default 1;# 设置游标declare c_score CURSOR forselect stu.id, lesson.lessonName, score.scorefrom stu join score on stu.id score.stuIdjoin lesson on score.LessonId lesson.lessonidjoin department on stu.departmentId department.idwhere stu.departmentId did and score.LessonId lid;select count(*) into score_countfrom (select stu.id, lesson.lessonName, score.scorefrom stu join score on stu.id score.stuIdjoin lesson on score.LessonId lesson.lessonidjoin department on stu.departmentId department.idwhere stu.departmentId did and score.LessonId lid)a;open c_score; # 打开游标while i score_count doFETCH c_score into stu_id, lname, stu_score; # 读取游标select stu_id, lname, stu_score; # 使用游标set i i 1;end while;close c_score; # 关闭游标end $ delimiter ;# 一般在命令列界面运行可以明显看出所要查看的数据 call p1(101, 101);如果是在可视化界面运行 call p1(101, 101);效果如下不方便查看数据是一条条输出的 在命令列界面运行 call p1(101, 101);方便查看 我们也尝试不用存储过程直接输出结果发现结果是一样的除了输出顺序不同 select stu.id, lesson.lessonName, score.scorefrom stu join score on stu.id score.stuIdjoin lesson on score.LessonId lesson.lessonidjoin department on stu.departmentId department.idwhere stu.departmentId 101 and score.LessonId 101;2. 触发器 2.1 创建触发器 用代码创建 CREATE TRIGGER 触发器名 触发时刻 触发事件ON 表名 FOR EACH ROW 触发器动作不过为了方便我们可以直接使用可视化界面创建触发器。 2.2 修改触发器 建议直接在 Navicat 上进行创建、修改、删除触发器在设计表中点击触发器即可。 2.3 删除触发器 前面说了可以直接使用 Navicat 删除触发器。 下面也给出相关代码 DROP TRIGGER [数据库名.]触发器名2.4 触发器类型 触发器只有 3 种类型插入、更新 和 删除。每种类型又有 2 种情况BEFORE 和 AFTER。 每个类型每种情况的触发器在一张表只能设置 1 个即一张表最多只有 6 个触发器。 对于 事件、全局锁、表锁、行锁和死锁 的内容在此不过多赘述大家要是感兴趣可以自行了解~ 2.5 触发器示例 使用 bank 数据库创建表 info利用触发器完成以下内容。下面会给出如何用 SQL 语句创建触发器并完成相应功能。 表 info 的内容如下 插入存取款记录(触发器 tri_insertinfo)——需要判断用户账号是否存在。 drop trigger if EXISTS tri_insertinfo; delimiter $ create TRIGGER tri_insertinfo before insert on info for each row begindeclare a int;select count(*) into afrom accountwhere account.id new.accountid;if a 0 then SIGNAL SQLSTATE 12345 set message_text 账号不存在;end if;if new.type save thenupdate accountset ck ck new.balancewhere account.id new.accountid;elseupdate accountset ck ck - new.balancewhere account.id new.accountid;end if;end$ delimiter ;查看当前所有用户存款 select * from account;给张三存入 500 元并查看当前全部用户存款 insert into info values(null, 001, save, 500); select * from account;李四取出 500 元 insert into info values(null, 002, load, 500); select * from account;给用户编号为 005 不存在用户存入 500 元 insert into info values(null, 005, save, 500); # 会显示账号不存在创建触发器 tri_deleteinfo 撤销存取款记录info 中的记录。 drop trigger if EXISTS tri_deleteinfo; delimiter $ create TRIGGER tri_deleteinfo after delete on info for each row beginif old.type save thenupdate accountset ck ck - old.balancewhere account.id old.accountid;elseupdate accountset ck ck old.balancewhere account.id old.accountid;end if;end$ delimiter ;撤销编号为 16 的取款操作 delete from info where id 16; # 撤销id为16的操作 select * from account;可见李四的账户从 5550 恢复到上次的 6050。 清除所有的存取款操作 delete from info; # 撤销所有存取款操作金额恢复 select * from account;可见张三的账户金额出现了负数这其实是异常结果所以大家可以自行在源代码里面新增报告异常的语句。 按照道理来说不会出现这种情况可能是我之前操作数据时改变了记录~ 创建触发器 tri_updateinfo用于修改用户存取款金额数。 drop trigger if EXISTS tri_updateinfo; delimiter $ create TRIGGER tri_updateinfo after update on info for each row beginif old.type save thenupdate accountset ck ck - old.balance new.balancewhere account.id old.accountid;elseupdate accountset ck ck old.balance - new.balancewhere account.id old.accountid;end if;end$ delimiter ;其实这个操作基本上用不上毕竟用户存、取多少就是多少而且这个操作可以用前面两个触发器实现因此这里不展示修改操作了~ 参考书籍 《MySQL实用教程第4版》 上一篇文章【数据库——MySQL】13过程式对象程序设计——存储函数、错误处理以及事务管理
http://www.dnsts.com.cn/news/240263.html

相关文章:

  • 电商型网站是否是趋势如何设计一个企业网站
  • 查找网站空间商网络营销平台有哪些特点
  • er图关于网站建设工作总结ppt模板免费下载
  • 怎样增加网站流量网站建设规划怎么写
  • 外贸出口公司网站建设方案wordpress wdpx
  • 有什么网站可以做名片简单的装x编程代码
  • 台前网站建设电话淘宝网站建设的缺点
  • 国人在线做网站怎么样wordpress 页面路径
  • 衡阳网站建设ss0734寻甸马铃薯建设网站
  • 建设机械网站哪家好html5修改器下载
  • wordpress翻译制作谷歌seo培训
  • 优秀国外网站设计赏析普通网站怎么做h5
  • 医院为什么要做门户网站建设网站开发中心
  • 温州敎玩具网站建设温州做网站优化
  • 中国外贸网站大全官网建站模板库
  • 单位门户网站WordPress查看用户密码
  • 网站接入网方式百度seo效果怎么样
  • 免费数据库网站空间网站的策划做推广
  • 网站制作公司要文化建设费亚马逊跨境电商
  • 建站宝盒购买微信公众号登录失败
  • 做cps要做什么类型的网站asp.net做登录网站资源
  • 奔奔网站建设wordpress随机图片
  • 网站建设请示报告厦门自助建站
  • 网站建设工作量评估企业门户网站建设方案
  • 阿里云建设网站教程珲春建设局网站
  • 网页设计视频网站建设怎么建网页
  • 网站开发jsp 很少深圳十大高科技企业
  • 青岛行业网站建设电话wordpress 自动安装 插件
  • 网站设计怎么用黑色怎样设计网站
  • 电信备案新增网站主机屋建网站源码