e.g.无参数的函数调用delimiter$$createfunctionst()returnsintbeginreturn(selectscorefromclass_1orderbyscoredesclimit1);end$$delimiter;selectst();
e.g.含有参数的函数调用delimiter$$createfunctionqueryNameById(uidint(10))returnsvarchar(20)beginreturn(selectnamefromclass_1whereid=uid);end$$delimiter;selectqueryNameById(1);存储过程创建
创建存储过程语法与创建函数基本相同,但是没有返回值。
delimiter自定义符号 createprocedure存储过程名(形参列表) begin 存储过程 --存储过程语句集,set
a定义变量 end自定义符号delimiter;释义:delimiter自定义符号是为了在函数内些语句方便,制定除了;之外的符号作为函数书写结束标志形参列表:[INOUT
INOUT]形参名类型in输入,out输出,inout可以输入也可以输出存储过程:若干sql语句组成,如果只有一条语句也可以不写delimiter和begin,end
e.g.存储过程创建和调用delimiter$$createprocedurest()beginselectname,agefromclass_1;selectname,scorefromclass_1orderbyscoredesc;end$$delimiter;callst();
存储过程三个参数的区别
IN类型参数可以接收变量也可以接收常量,传入的参数在存储过程内部使用即可,但是在存储过程内部的修改无法传递到外部。
OUT类型参数只能接收一个变量,接收的变量不能够在存储过程内部使用(内部为NULL),但是可以在存储过程内对这个变量进行修改。因为定义的变量是全局的,所以外部可以获取这个修改后的值。
INOUT类型参数同样只能接收一个变量,但是这个变量可以在存储过程内部使用。在存储过程内部的修改也会传递到外部。
设置变量方法:set
[变量名]=值;表示这是一个用户变量,使用时用[变量名]。在函数内部设置declare[变量名][变量类型]为局部变量,局部变量可以使用set赋值或者着使用into关键字。e.g.:分别将参数类型改为INOUTINOUT看一下结果区别delimiter$$createprocedurep_out(OUTnumint)beginselectnum;setnum=;selectnum;end$$delimiter;set
num=10;callp_out(num)存储过程和存储函数操作调用存储过程
语法:
call存储过程名字([存储过程的参数[,……]])
调用存储函数
语法:
select存储函数名字([存储过程的参数[,……]])
使用showstatus语句查看存储过程和函数的信息
语法:
show{procedure
function}status[like’存储过程或存储函数的名称’]
显示内容:数据库、名字、类型、创建者、创建和修改日期
使用showcreate语句查看存储过程和函数的定义
语法:
showcreate{procedure
function}存储过程或存储函数的名称
删除存储过程或存储函数
语法:
DROP{PROCEDURE
FUNCTION}[IFEXISTS]sp_name函数和存储过程区别
函数有且只有一个返回值,而存储过程不能有返回值。
函数只能有输入参数,而存储过程可以有in,out,inout多个类型参数。
存储过程中的语句功能更丰富,实现更复杂的业务逻辑,可以理解为一个按照预定步骤调用的执行过程,而函数中不能展示查询结果集语句,只是完成查询的工作后返回一个结果,功能针对性比较强。
存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用。
事务控制事务概述MySQL事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,如果操作就必须同时操作成功,如果有一个不成功则所有数据都不动。这时候数据库操作语句就构成一个事务。事务主要处理数据的增删改操作。
定义
一件事从开始发生到结束的过程
作用
确保数据操作过程中的一致性、完整性、准确性、有效性
事务四大特性原子性(atomicity)
一个事务必须视为一个不可分割的最小工作单元,对于一个事务来说,不可能只执行其中的一部分操作,整个事务中的所有操作要么全部提交成功,要么全部失败回滚
一致性(consistency)
事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏。
隔离性(isolation)
数据库允许多个并发事务同时对其数据进行读写和修改的能力,而多个事务相互独立。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性(durability)
一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。
事务操作开启事务
mysqlbegin;#方法1mysqlstarttransaction;#方法2
开始执行事务中的若干条SQL命令(增删改)