第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 ...
随机推荐
- 利用Matlab生成一个网格化的三维三轴椭球面(生成直角坐标)
代码很简单,a,b,c分别为椭球的三轴轴长,a=b=c时得到的是三维球面,a=b!=c时得到的是三维椭球面,a!=b且a!=c且b!=c时得到的是三维旋转椭球面 %生成一个笛卡尔坐标系下三轴椭球表面的 ...
- Asp.net MVC4.0(net4.5) 部署到window server 2003上的解决方案
Asp.net MVC4.0(net4.5) 部署到window server 2003上的解决方案 最近做了一个Web项目,也没多想就用了Asp.net MVC4.0 ,MVC4.0默认的目标fra ...
- C# 订单流水号生成
例如流水号格式如下:XX201604120001,2位前缀加8位日期加4位流水号 首先各种搜索出现如下解决方案 public class SerialNoHelper { /// <summar ...
- [转]loadView的用法,loadView创建基本界面,DidLoad读入数据
loadview: // 有没有nib 只要是复写了loadview loadview都会被执行 有nib文件的话加载的是nib文件的view 没有的话会按照loadview里的代码加载 ...
- [NLP自然语言处理]计算熵和KL距离,java实现汉字和英文单词的识别,UTF8变长字符读取
算法任务: 1. 给定一个文件,统计这个文件中所有字符的相对频率(相对频率就是这些字符出现的概率——该字符出现次数除以字符总个数,并计算该文件的熵). 2. 给定另外一个文件,按上述同样的方法计算字符 ...
- arcengine 实现调用arctoolbox中的dissolove
ESRI.ArcGIS.Geoprocessor.Geoprocessor geoprocessor = new Geoprocessor(); ESRI.ArcGIS.DataManagementT ...
- K2 BPM项目 基于COM组件调用SAP RFC 问题
K2 BPM项目 基于COM组件调用SAP RFC 问题 问题前景: 环境:Win 2008 R2 64bit 最近项目中有支流程需求中需要在会计入账环节回写SAP的会计凭证. SAP组给我们提供.N ...
- Android SDK文档如何查找
肯定很多人都会有疑问,怎样使用Android SDK 文档该如何使用呢?里面有那么多内容,又全是英文的,接下来告诉大家. 以下内容来自网络. ----------------------------- ...
- 函数模板的trick
函数模板的trick 让gcc支持成员函数模板的trick 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议 gcc ...
- Winform DataGridView CheckBoxColumn c# 单选 解决方案
这个问题由来已久,我最近在工作中也遇到了这个问题,不过属于这个问题比较简单初级的涉及. 发现网上对这个问题的解决方案很多不对,答非所问. 所以这里将我测试成功的解决方案记录下来. 首先,DataGri ...