第13章 MySQL高级编程
1.事务:一个或一系列的查询;
2.使用事务安全的表格类型(通过InnoDB):
①关闭自动提交: set autocommit=0;
//若自动提交被打开,须使用如下语句开始一个事务:
// start transaction; 若自动提交是关闭的则不需要此句
②完成组成事务的语句输入后,提交给数据库: commit;
③回到数据库之前的状态: rollback;
④将表格转换成InnoDB表格(之前是MyISAM表格):
alter table orders type=innodb;
alter table order_items type=innodb;
//转成InnoDB表格后,需要再使用commit;语句才能完成提交到数据库的行为
3.(InnoDB下)添加外键:
要先创建一个使用外键的表格:
如:create table order_items{
……
}type=InnoDB;
再使用ALTER TABLE语句添加外键:
如: alter table order_items type=InnoDB;
alter table order_items
add foreign key (orderid) references orders(orderid);
//orderid列是一个外键,包含orders表格中的orderid列值
4.存储:
①声明一个存储过程:
# basic_stored_procedure.sql
# Basic stored procedure example
delimiter //
# 分隔符//替换; 使得在存储过程中使用分号分隔符 create procedure total_orders (out total float)
# total_orders是存储过程名称
# out表示该参数将被传出或返回(对应的是in)
# total是被传递的参数,若有多个参数则用逗号分隔
# float是参数的类型
BEGIN
select sum(amount) into total from orders;
END
// delimiter;
# 过程声明完成,将分隔符重新设置为分号
过程声明结束后,使用call关键字:
如: call total_orders(@t);
//调用total_orders过程并传入一个用来保存结果的变量@t
//查看结果: select @t;
②声明一个存储函数:
# basic_function.sql
# Basic syntax to create a function
delimiter // create function add_tax (price float) returns float
begin
declare tax float default 0.10;
# declare用于在begin...end中声明局部变量
return price*(1+tax);
end
// delimiter;
查看结果: select add_tax(100); //100是传过去的price值
③查看定义存储过程和存储函数:
show create procedure total_orders;
show create function add_tax;
删除之:
drop procedure total_orders;
drop function add_tax;
④游标、控制结构:
# control_structures_cursors.sql # Procedure to find the orderid with the largest amount
# could be done with max, but just to illustrate stored procedure principles
delimiter // create procedure largest_order(out largest_id int)
begin
declare this_id int; #当前行的orderid值
declare this_amount float; #当前行的amount值
declare l_amount float default 0.0; #最大的订单金额
declare l_id int; #最大订单金额对应的ID declare done int default 0; #循环标记
# 声明句柄,类似于存储过程中的一个异常
#(该句柄将在sqlstate '02000'语句被执行时调用)
declare continue handler for sqlstate '02000' set done =1;
# 游标c1,类似于一个数组从一个查询获得结果集
declare c1 cursor for select orderid, amount from orders; open c1; #open才是真正开始执行查询
repeat
fetch c1 into this_id, this_amount;
if not done then
if this_amount>l_amount then
set l_amount=this_amount;
set l_id=this_id;
end if;
end if;
until done end repeat;
close c1; set largest_id=l_id;
end
// delimiter;
调用过程: call largest_order(@l);
查看结果: select @l;
第13章 MySQL高级编程的更多相关文章
- 第四章 MySQL高级查询(二)
第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...
- 第三章 MySQL高级查询(一)
第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1. DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...
- Learning Spark中文版--第六章--Spark高级编程(2)
Working on a Per-Partition Basis(基于分区的操作) 以每个分区为基础处理数据使我们可以避免为每个数据项重做配置工作.如打开数据库连接或者创建随机数生成器这样的操作,我们 ...
- Learning Spark中文版--第六章--Spark高级编程(1)
Introduction(介绍) 本章介绍了之前章节没有涵盖的高级Spark编程特性.我们介绍两种类型的共享变量:用来聚合信息的累加器和能有效分配较大值的广播变量.基于对RDD现有的transform ...
- MySQL基础之第13章 MySQL函数
13.1.数学函数 随机数可能会用到,其他基本无视. 13.2.字符串函数 重点CONCAT(S1,S2….) 13.3.日期和时间函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+ ...
- 温故而知新-MySQL高级编程
1 load data infile语句 MySQL下的命令 登录mysql命令行模式 load data infile "/var/www/1.txt" into table ...
- 第13章 MySQL服务器的状态--高性能MySQL学习笔记
13.1 系统变量 -- 服务器配置变量 MySQL通过SHOW VARIABLES SQL命令显示许多系统变量. 13.2 状态变量--SHOW STATUS SHOW STATUS 命令会在一个 ...
- 第12章 MySQL高级管理
1.手动更新权限后,需向服务器指出已对权限进行修改: (在MySQL提示符下)flush privileges; 2.查看用户所拥有的权限: 如: show grants for bookorama; ...
- accp8.0转换教材第3章MySQL高级查询(一)理解与练习
一.单词部分 ①constraint约束②foreign外键③references参考 ④subquery子查询⑤inner内部的⑥join连接 二.预习部分 1.修改表SQL语句的关键字是什么 RE ...
随机推荐
- iOS基础 - XML & JSON
一.HTML & XML HTML 是用来描述网页的一种语言 HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记 ...
- C#自定义配置文件节点
老实说,在以前没写个自定义配置节点之前,我都是写到一个很常用的节点里面,就是appSettings里add,然后再对各个节点的value值进行字符串分割操作,根据各种分割字符嵌套循环处理,后来看到一些 ...
- C# 利用反射动态创建对象——带参数的构造函数和String类型
C# 利用反射动态创建对象——带参数的构造函数和String类型 最近笔者有一个想法需要利用反射动态创建对象(如string,int,float,bool,以及自定义类等)来实现,一直感觉反射用不好, ...
- 《12个有趣的C语言问答》评析2
<12个有趣的C语言问答>评析(2) 前文链接:http://www.cnblogs.com/pmer/p/3313913.html (没存盘,遭遇过热保护.至少4个问答的评论白写了.默哀 ...
- 记一次bug查找经历
系统采用cell插件显示汇总数据,然后发现个公司数据显示不出来,接到这个任务开始查找bug. 通过需求了解并不知道其他公司什么情况,因为就这个公司有了反馈: 本来以为很容易找到点的,毕竟数据显示不出来 ...
- IE8下提示'console'未定义错误
在开发的过程中由于调试的原因,在代码中加入console.info("xxxx"),而未进行删除 在IE8下测试该代码所在的页面报错,如下: 需要注意的是,使用console对象查 ...
- SSH整合创建SessionFactory
在spring中的 applicationContext.xml中配置如下信息 <!-- 配置数据连接类 --> <bean id="dataSource" cl ...
- Ling to entity实现分页
Ling to entity实现分页 最近用MVC做的一个项目涉及到分页,中间用了entity framework来查数据库,不用直接写sql语句,方便了很多. 一般分页的思路是获得两个变量的值: 1 ...
- .Net里的Attribute 学习
.Net里的Attribute 学习 前两天看到书里边讲Attribute定制,结合了网上的资料,自己做了简单的登录功能,并结合了某些设计模式,有兴趣的朋友可以看下.由于时间原因,没有做过多的说明,直 ...
- [置顶] SQL注入安全分析
(一) 应用环境列表 网络互联设备操作系统 序号 操作系统名称 设备名称 脆弱性 1 IOS_路由器_内部_1 route1 2 IOS_路由器_VPN_1 路由器_VPN_1 3 IOS ...