上一篇 MySQL基础(三)—函数、自定义函数
这一篇是对存储过程和存储引擎的笔记,其中操作的数据库在上一篇文章中有代码,可以去看一下。
存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并座位一个单元处理。
说到存储过程的作用,咱们先来说一下写了sql命令之后到拿到返回结果,mysql都经历了哪些。
1、首先输入sql命令之后,mysql引擎会首先对sql命令进行语法分析,来检查sql命令是不是正确
2、如果sql命令是正确的,那么sql命令会通过编译转化成msyql可以识别的命令
3、然后开始执行命令
4、最后将结果返回给客户端
有了上述的这个过程,那咱们如果把检查命令和编译省略掉,就能提升sql命令的效率。那么问题来了,
怎么能省略掉前边的步骤呢?就是是用存储过程!
在一条sql命令第一次被执行的时候,同样会经历上述四个步骤。但是从第二次起,就不用再重新检查和编译了。
create PROCEDURE sp1() SELECT VERSION();
#调用存储过程
CALL sp1();
#如果该存储过程没有参数,可以省略后边算是方法名的小括号
CALL sp1;
#按id删除球员
#这里有个问题,参数名的不要和数据库里边字段的名称相同
CREATE PROCEDURE deletePlyerById(IN id INT UNSIGNED)
BEGIN
DELETE FROM player where player.playerId=id;
END
select * FROM player
select player.playerId FROM player WHERE player.playerName="我是小米1";
select player.playerId FROM player WHERE player.playerName="我是小米";
#调用存储过程删除两个球员
CALL deletePlyerById(59);
CALL deletePlyerById(60);
#删除球员,并且返回数据库里边还有多少球员
CREATE PROCEDURE detelePlayerByIdReturnPlayerSum(IN id INT UNSIGNED,OUT playerSum INT UNSIGNED)
BEGIN
DELETE FROM player WHERE player.playerId=id;
SELECT COUNT(player.playerId) FROM player INTO playerSum;
END
select player.playerId FROM player WHERE player.playerName="李小米%%";
CALL detelePlayerByIdReturnPlayerSum(57,@playerSum);
SELECT @playerSum
SELECT SUM(player.championNumber) FROM player WHERE player.teamId=2
#通过teamid 查询这个球队 有多少个球员,以及这些球员所获得的总冠军总数
CREATE PROCEDURE queryPlayerNumberAndChampionSumByTeamId(IN p_teamId INT ,OUT playerSumForTeam INT UNSIGNED,OUT championSum INT UNSIGNED)
BEGIN
SELECT COUNT(player.playerId) FROM player WHERE player.teamId=p_teamId INTO playerSumForTeam;
SELECT SUM(player.championNumber) FROM player WHERE player.teamId=p_teamId INTO championSum;
END
#调用
CALL queryPlayerNumberAndChampionSumByTeamId(2,@playerSumForTeam,@championSum);
SELECT @playerSumForTeam
SELECT @championSum
DROP PROCEDURE deletePlyerById;
MySQL可以将数据以不同的技术存储在文件中,这种技术被称为存储引擎。每种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。
-default-storage-engine=engine(存储引擎的名称)
CREATE TABLE test1(
s1 VARCHAR(10))
engine=MyISAM;
CREATE TABLE test2(
s1 VARCHAR(10))
engine=InnoDB;
查询数据表结构
SHOW CREATE table test1;
#结果
#CREATE TABLE `test1` ( `s1` varchar(10) DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8
SHOW CREATE table test2;
#结果
#CREATE TABLE `test2` ( `s1` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8
ALTER TABLE test1 ENGINE=INNODB;
#结果
#CREATE TABLE `test1` ( `s1` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
SHOW CREATE table test1;
#结果
#CREATE TABLE `test1` ( `s1` varchar(10) DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE test1,test2;
MySQL基础先学习到这里,完整的sql文件已经上传到github。
点击查看本节SQL