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高级编程的更多相关文章

  1. 第四章 MySQL高级查询(二)

    第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...

  2. 第三章 MySQL高级查询(一)

    第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...

  3. Learning Spark中文版--第六章--Spark高级编程(2)

    Working on a Per-Partition Basis(基于分区的操作) 以每个分区为基础处理数据使我们可以避免为每个数据项重做配置工作.如打开数据库连接或者创建随机数生成器这样的操作,我们 ...

  4. Learning Spark中文版--第六章--Spark高级编程(1)

    Introduction(介绍) 本章介绍了之前章节没有涵盖的高级Spark编程特性.我们介绍两种类型的共享变量:用来聚合信息的累加器和能有效分配较大值的广播变量.基于对RDD现有的transform ...

  5. MySQL基础之第13章 MySQL函数

    13.1.数学函数 随机数可能会用到,其他基本无视. 13.2.字符串函数 重点CONCAT(S1,S2….) 13.3.日期和时间函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+ ...

  6. 温故而知新-MySQL高级编程

    1 load data infile语句 MySQL下的命令  登录mysql命令行模式 load data infile "/var/www/1.txt" into table ...

  7. 第13章 MySQL服务器的状态--高性能MySQL学习笔记

    13.1 系统变量 -- 服务器配置变量 MySQL通过SHOW VARIABLES  SQL命令显示许多系统变量. 13.2 状态变量--SHOW STATUS SHOW STATUS 命令会在一个 ...

  8. 第12章 MySQL高级管理

    1.手动更新权限后,需向服务器指出已对权限进行修改: (在MySQL提示符下)flush privileges; 2.查看用户所拥有的权限: 如: show grants for bookorama; ...

  9. accp8.0转换教材第3章MySQL高级查询(一)理解与练习

    一.单词部分 ①constraint约束②foreign外键③references参考 ④subquery子查询⑤inner内部的⑥join连接 二.预习部分 1.修改表SQL语句的关键字是什么 RE ...

随机推荐

  1. Android项目--获取系统通讯录列表

    ----------------- 通讯录列表 ----------------- 按常理来说,获取系统通讯录列表,无非就是将通讯录的数据库打开获取数据,适配,添加即可. Cursor cursor; ...

  2. JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明

    JDK6.Oracle11g.Weblogic10 For Linux64Bit安装部署说明 项目编号 编写人 成 编写日期 2013/07/29 审核 修订说明 目录 JDK6.ORACLE11G. ...

  3. 更改MYSQL数据库不区分大小写表名

    今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢? 后来请教了一个老师才搞定,原来是LINUX下的MYSQL默认是要区 ...

  4. Python Learing(二):Basic Image Processing 1

    <写在前面> Basic image processing 1: 0.(以简单的曲线图为例)对于生成的图自定义外观,使用子图,多个数据集,标题,标签,交互式标注,图例: 1.生成散点图,直 ...

  5. [转]Inspecting Obj-C parameters in gdb

    Since the addition of i386 and x86_64 to the Mac OS’s repertoire several years back, remembering whi ...

  6. 用django搭建一个简易blog系统(翻译)(二)

    03. Starting the blog app 在这部分,将要为你的project创建一个blog 应用,通过编辑setting.py文件,并把它添加到INSTALLED_APPS. 在你的命令行 ...

  7. 自定义radio图标

    问题: 默认的radio控件不是很好看,我们能否自定义一个radio图标? 解决: 1.radio有input和lable两个标签. 2.<input>是前面的图标,选中后图标变化. 3. ...

  8. django restful webservice返回json数据

    做这个demo的前提是你已经配好了python ,django ,djangorestframwork(在我的上一篇博客中有介绍,大家也可以google),mysql-python等. djangor ...

  9. socket网络编程快速上手(一)

    工作以来,写了很多socket相关的代码.磕磕碰碰,走了很多弯路,也积累了一些东西,今天正好整理一下.为了证明不是从书上抄来的,逻辑会有点乱(借口,呵呵)!知识点的介绍也不会像书上说的那么详细和精准, ...

  10. springMVC3学习(十)--注解式控制器

    Spring2.5引入注解式处理器支持,通过@Controller和@RequestMapping注解定义 我们的处理器类.并且提供了一组强大的注解 需要通过处理器映射DefaultAnnotatio ...