Mysql数据库-存储过程

一、什么是存储过程

存储过程其实就是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。

【存储过程就是SQL语句集】

MySQL中提供存储过程与存储函数机制,我们姑且将存储过程和存储函数合称为存储程序。与一般的SQL语句需要先编译然后立即执行不同,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储程序的名字并给定参数(如果该存储程序带有参数)来调用才会执行。

存储程序就是一条或者多条SQL语句和控制语句的集合,我们可以将其看作MySQL的批处理文件,当然,其作用不仅限于批处理。当想要在不同的应用程序或平台上执行相同的功能一段程序或者封装特定功能时,存储程序是非常有用的。数据库中的存储程序可以看做是面向对编程中面向对象方法,它允许控制数据的访问方式。

理解:

数据库的存储过程好比是python的函数,类似于函数,可以定义存储过程(类似于封装一个函数,只是存储过程中是将一些SQL语句集合封装在一起,形成一个具有特定功能的模块/函数),调用存储过程

目的:

存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

优点:

(1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。

(5).作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

二、创建存储过程

创建存储过程语法结构如下:

CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...]

BEGIN

过程体

END

CREATE PROCEDURE是用来创建存储过程的关键字;[IN|OUT|INOUT]是参数的输入输出类型,IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;过程体是包含若干SQL语句或流程控制语句的集合,可以用BEGIN…END来包裹。

delimiter // # 定义结束符

create procedure show() # 创建存储过程,存储过程的名称是show

begin

# SQL语句集

end

// # 表示存储过程写完了

delimiter ; # 恢复结束符

案例体验:

在演示如果创建存储过程之前(emp表、dept表),先创建两个数据表,本文所有演示操作都基于这两个表来进行,创建表与插入数据SQL语句如下:

DROP TABLE IF EXISTS `emp`;

CREATE TABLE `emp` (

`empno` int(4) NOT NULL,

`ename` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,

`job` varchar(9) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,

`mgr` int(4) NULL DEFAULT NULL,

`hiredate` date NULL DEFAULT NULL,

`sal` float(7, 2) NULL DEFAULT NULL,

`comm` float(7, 2) NULL DEFAULT NULL,

`deptno` int(2) NULL DEFAULT NULL,

PRIMARY KEY (`empno`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;

INSERT INTO `emp` VALUES (7369, 'SMITH', 'CLERK', 7902, '1998-12-17', 800.00, NULL, 20);

INSERT INTO `emp` VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600.00, 300.00, 30);

INSERT INTO `emp` VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250.00, 500.00, 30);

INSERT INTO `emp` VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975.00, NULL, 20);

INSERT INTO `emp` VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250.00, 1400.00, 30);

INSERT INTO `emp` VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850.00, NULL, 30);

INSERT INTO `emp` VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450.00, NULL, 10);

INSERT INTO `emp` VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1981-11-17', 3000.00, NULL, 20);

INSERT INTO `emp` VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000.00, NULL, 10);

INSERT INTO `emp` VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500.00, 0.00, 30);

INSERT INTO `emp` VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100.00, NULL, 20);

INSERT INTO `emp` VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950.00, NULL, 30);

INSERT INTO `emp` VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000.00, NULL, 20);

INSERT INTO `emp` VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-02-23', 1300.00, NULL, 10);

INSERT INTO `emp` VALUES (8888, 'CHB', 'CLERK', 7369, '2018-12-10', 8000.00, 100.00, NULL);

DROP TABLE IF EXISTS `dept`;

CREATE TABLE `dept` (

`deptno` int(2) NOT NULL,

`dname` varchar(14) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,

`loc` varchar(13) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,

PRIMARY KEY (`deptno`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;

INSERT INTO `dept` VALUES (10, 'ACCOUNTING', 'NEW YORK');

INSERT INTO `dept` VALUES (20, 'RESEARCH', 'DALLAS');

INSERT INTO `dept` VALUES (30, 'SALES', 'CHICAGO');

INSERT INTO `dept` VALUES (40, 'OPERATIONS', 'BOSTON');

建好表后,我们来创建一个存储过程。

示例1:通过存储过程完成查询每个员工编号(empno)、姓名(ename)、职位(job)、领导编号(mgr)、领导姓名(empno)、部门名称(dname)、部门位置(loc)。

delimiter //

create procedure select_pro()

begin

select e1.empno bianhao, e1.ename xingming, e1.job zhiwei, e1.mgr lindaobianhao, e2.ename lindaoxingming, d.dname bumenmingchen, d.loc bumenweizhi from emp e1 , emp e2 , dept d where e1.mgr=e2.empno and e1.deptno=d.deptno ;

end //

delimiter ;

注:“delimiter //”语句的作用是将MySQL的结束符设置为//,因为MySQL默认的语句结束符是分号“;”,为了避免与存储过程中的SQL语句结束符相冲突,需要使用delimiter改变存储过程的结束符,设置为以“end //”结束存储过程。存储过程定义完毕之后,再使用“delimiter;”回复默认结束符。delimiter也可以指定其他符号作为结束符(“\”除外,这是转义字符)。当然,如果你在Navicat等图形界面下进行,可以不用设置delimiter。

二、调用存储过程

示例1中SQL语句创建了一个名为select_pro的存储过程,通过“call select_pro()”,即可完成查询功能,不在需要每次查询都重写查询语句。

格式:call 存储过程名();

call select_pro()

三、查询存储过程

show procedure status;

四、删除存储过程

如果存储过程写错了,需要进行修改时,只能删除原先的存储过程,重新定义;

drop procedure 存储过程的名称;

五、创建带参数的存储过程

示例2:创建一个带参数的存储过程,删除emp表中empno为指定值得记录,并返回最高最高月薪,也返回大于指定月薪的人数。

delimiter //

create procedure param_pro(in id int , out num int, inout p_sal int)

begin

delete from emp where empno = id ;

select max(sal) from emp into num;

select count(*) into p_sal from emp where sal >P_sal ;

end //

delimiter ;

调用上面创建好的存储过程param_pro:

set @p_sal = 1250 ;

call param_pro(7369 , @num , @p_sal);

select @num , @p_sal ;

六、存储函数

查看mysql数据库是否开启了函数功能

show variables like 'log_bin_trust_function_creators';

set global log_bin_trust_function_creators=1;

查询mysql数据库中的函数

show function status;

生成随机英文字符

delimiter //

drop function if exists rand_string;

create function rand_string(n int) returns varchar(255)

begin

declare chars_str varchar(52) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

declare return_str varchar(255) default '';

declare i int default 0;

while i

set return_str=concat(return_str,substring(chars_str,floor(1+rand()*52),1));

set i=i+1;

end while;

return return_str;

end //

delimiter;

生成随机汉字

drop function if exists rand_name;

delimiter //

-- 生成用户姓名

create definer=`root`@`localhost` function `rand_name`(n int) returns varchar(255) charset utf8

begin

declare char_str varchar(255) default '哈哈章与张霞笑小欧由于语塔堆太湖想笑一二三四五六七八九十宇宇你是最耀眼的星星再干一杯永远生命不过短暂的烟火爱你所爱无问西东';

declare return_name varchar(255) default '';

declare i int default 0;

declare j int default 0;

declare length_str int default length(char_str)/3;

set j = floor(1+rand()*length_str);

if j%2 then

set j=j;

else

set j=j+1;

end if;

while i < n do

set return_name = concat(return_name, substring(char_str,j,2));

set j = floor(1+rand()*length_str);

if j%2 then

set j=j;

else

set j=j+1;

end if;

set i = i + 1;

end while;

return return_name;

end//

delimiter;

生成电话号码

#电话号码头部

drop function if exists `phone_head`;

delimiter //

create definer=`root`@localhost function `phone_head`() returns char(3) charset utf8

begin

declare head char(3);

declare bodys varchar(225) default'130 131 132 133 134 135 136 137 138 139 186 187 189 151 157';

declare starts int;

set starts = 1 + floor(rand()*15)*4 ;

set head =trim(substring(bodys,starts,3));

return head;

end//

delimiter ;

#生成随机数字串

drop function if exists `rand_string_num`;

delimiter //

create definer=`root`@`IP地址` function `rand_string_num`(n int) returns varchar(255) charset utf8

begin

declare char_str varchar(255) default '0123456789';

declare return_str varchar(255) default '';

declare i int default 0;

while i < n do

set return_str=concat(return_str,substring(char_str,floor(1+rand()*10),1));

set i=i+1;

end while;

return return_str;

end //

delimiter;

#生成电话号码

drop function if exists `get_phone`;

delimiter //

create definer=`root`@`IP地址` function `get_phone`() returns varchar(20) charset utf8

begin

declare phone varchar(11);

set phone = trim(concat(phone_head(),rand_string_num(8)));

return phone;

end //

delimiter ;

drop function if exists `phone`;

delimiter //

create definer=root@localhost function phone() returns char(11) charset utf8

begin

declare head varchar(3) default '';

declare bodys varchar(225) default '130 131 132 133 134 135 136 137 138 139 186 187 189 151 157';

declare starts int;

declare num varchar(8);

declare phone_num varchar(11);

set starts = 1 + floor(rand()*15)*4;

set head =trim(substring(bodys,starts,3));

set num = FLOOR(RAND()*500000000 + 5000000000);

set phone_num = concat(head,num);

return phone_num;

end//

delimiter;

随机生成名字—存储过程

drop PROCEDURE if exists jishu5;

DELIMITER //

CREATE PROCEDURE jishu5()

BEGIN

DECLARE xing varchar(2056) DEFAULT '赵钱孙李周郑王冯陈楮卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闽席季麻强贾路娄危江童颜郭梅盛林刁锺徐丘骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁';

DECLARE ming varchar(2056) DEFAULT '嘉懿煜城懿轩烨伟苑博伟泽熠彤鸿煊博涛烨霖烨华煜祺智宸正豪昊然明杰诚立轩立辉峻熙弘文熠彤鸿煊烨霖哲瀚鑫鹏致远俊驰雨泽烨磊晟睿天佑文昊修洁黎昕远航旭尧鸿涛伟祺轩越泽浩宇瑾瑜皓轩擎苍擎宇志泽睿渊楷瑞轩弘文哲瀚雨泽鑫磊梦琪忆之桃慕青问兰尔岚元香初夏沛菡傲珊曼文乐菱痴珊恨玉惜文香寒新柔语蓉海安夜蓉涵柏水桃醉蓝春儿语琴从彤傲晴语兰又菱碧彤元霜怜梦紫寒妙彤曼易南莲紫翠雨寒易烟如萱若南寻真晓亦向珊慕灵以蕊寻雁映易雪柳孤岚笑霜海云凝天沛珊寒云冰旋宛儿绿真盼儿晓霜碧凡夏菡曼香若烟半梦雅绿冰蓝灵槐平安书翠翠风香巧代云梦曼幼翠友巧听寒梦柏醉易访旋亦玉凌萱访卉怀亦笑蓝春翠靖柏夜蕾冰夏梦松书雪乐枫念薇靖雁寻春恨山从寒忆香觅波静曼凡旋以亦念露芷蕾千兰新波代真新蕾雁玉冷卉紫山千琴恨天傲芙盼山怀蝶冰兰山柏翠萱乐丹翠柔谷山之瑶冰露尔珍谷雪乐萱涵菡海莲傲蕾青槐冬儿易梦惜雪宛海之柔夏青亦瑶妙菡春竹修杰伟诚建辉晋鹏天磊绍辉泽洋明轩健柏煊昊强伟宸博超君浩子骞明辉鹏涛炎彬鹤轩越彬风华靖琪明诚高格光华国源宇晗昱涵润翰飞翰海昊乾浩博和安弘博鸿朗华奥华灿嘉慕坚秉建明金鑫锦程瑾瑜鹏经赋景同靖琪君昊俊明季同开济凯安康成乐语力勤良哲理群茂彦敏博明达朋义彭泽鹏举濮存溥心璞瑜浦泽奇邃祥荣轩';

DECLARE l_xing int DEFAULT LENGTH(xing) / 3; # 这里的长度不是字符串的字数,而是此字符串的占的容量大小,一个汉字占3个字节

DECLARE l_ming int DEFAULT LENGTH(ming) / 3;

DECLARE str_xing varchar(255) DEFAULT '';

DECLARE str_ming varchar(255) DEFAULT '';

DECLARE rand_name varchar(255) DEFAULT '';

declare i int(4) default 0;

set i = FLOOR(1+RAND()*l_xing);

# 先选出姓

if i%2 THEN

set i = i;

ELSE

set i = i + 1;

END IF;

SET str_xing = CONCAT(str_xing, SUBSTRING(xing, i, 2));

#再选出名

SET str_ming = CONCAT(str_ming, SUBSTRING(ming, i, 4));

SET rand_name =concat(str_xing,str_ming);

select rand_name;

END //

delimiter;

随机生成名字—存储函数

drop function if exists `get_name`;

delimiter //

create definer=`root`@`IP地址` function `get_name`(n int) returns varchar(255)

begin

DECLARE xing varchar(2056) DEFAULT '赵钱孙李周郑王冯陈楮卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闽席季麻强贾路娄危江童颜郭梅盛林刁锺徐丘骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁';

DECLARE ming varchar(2056) DEFAULT '嘉懿煜城懿轩烨伟苑博伟泽熠彤鸿煊博涛烨霖烨华煜祺智宸正豪昊然明杰诚立轩立辉峻熙弘文熠彤鸿煊烨霖哲瀚鑫鹏致远俊驰雨泽烨磊晟睿天佑文昊修洁黎昕远航旭尧鸿涛伟祺轩越泽浩宇瑾瑜皓轩擎苍擎宇志泽睿渊楷瑞轩弘文哲瀚雨泽鑫磊梦琪忆之桃慕青问兰尔岚元香初夏沛菡傲珊曼文乐菱痴珊恨玉惜文香寒新柔语蓉海安夜蓉涵柏水桃醉蓝春儿语琴从彤傲晴语兰又菱碧彤元霜怜梦紫寒妙彤曼易南莲紫翠雨寒易烟如萱若南寻真晓亦向珊慕灵以蕊寻雁映易雪柳孤岚笑霜海云凝天沛珊寒云冰旋宛儿绿真盼儿晓霜碧凡夏菡曼香若烟半梦雅绿冰蓝灵槐平安书翠翠风香巧代云梦曼幼翠友巧听寒梦柏醉易访旋亦玉凌萱访卉怀亦笑蓝春翠靖柏夜蕾冰夏梦松书雪乐枫念薇靖雁寻春恨山从寒忆香觅波静曼凡旋以亦念露芷蕾千兰新波代真新蕾雁玉冷卉紫山千琴恨天傲芙盼山怀蝶冰兰山柏翠萱乐丹翠柔谷山之瑶冰露尔珍谷雪乐萱涵菡海莲傲蕾青槐冬儿易梦惜雪宛海之柔夏青亦瑶妙菡春竹修杰伟诚建辉晋鹏天磊绍辉泽洋明轩健柏煊昊强伟宸博超君浩子骞明辉鹏涛炎彬鹤轩越彬风华靖琪明诚高格光华国源宇晗昱涵润翰飞翰海昊乾浩博和安弘博鸿朗华奥华灿嘉慕坚秉建明金鑫锦程瑾瑜鹏经赋景同靖琪君昊俊明季同开济凯安康成乐语力勤良哲理群茂彦敏博明达朋义彭泽鹏举濮存溥心璞瑜浦泽奇邃祥荣轩';

DECLARE l_xing int DEFAULT LENGTH(xing) / 3; # 这里的长度不是字符串的字数,而是此字符串的占的容量大小,一个汉字占3个字节

DECLARE l_ming int DEFAULT LENGTH(ming) / 3;

DECLARE str_xing varchar(255) DEFAULT '';

DECLARE str_ming varchar(255) DEFAULT '';

DECLARE rand_name varchar(255) DEFAULT '';

declare i int(4) default 0;

declare j int(4) default 0;

set i = FLOOR(1+RAND()*l_xing);

# 先选出姓

if i%2 THEN

set i = i;

ELSE

set i = i + 1;

END IF;

SET str_xing = CONCAT(str_xing, SUBSTRING(xing, i, 2));

#再选出名

while j

SET str_ming = CONCAT(str_ming, SUBSTRING(ming, i, 2));

set i = FLOOR(1+RAND()*l_xing);

if i%2 THEN

set i = i;

ELSE

set i = i + 1;

END IF;

set j = j+1;

end while;

SET rand_name =concat(str_xing,str_ming);

return rand_name;

end//

delimiter;

七、向学生表中插入1000条数据

创建一个张学生表

drop procedure if exists create_table;

delimiter //

create procedure create_table()

begin

drop table if exists students;

create table students(id int(4) not null primary key auto_increment,

name varchar(20),

sex varchar(10),

age int(4),

mobile varchar(20),

address varchar(20),

class varchar(10));

desc students;

end//

delimiter;

call create_table();

插入1000条数据

1、创建一个存储函数,用来随机生成性别,男或女

drop function if exists get_sex;

delimiter//

create function get_sex() returns varchar(255)

begin

declare str varchar(10) default '男女';

declare i int default 0;

declare sex varchar(255) default '';

set i = floor(1+rand()*length(str)/2);

if i%2 then

set i = i;

else

set i = i + 1;

end if;

set sex = concat(sex,substring(str,i,2));

return sex;

end//

delimiter;

1、创建一个存储函数,用来随机生成年龄

drop function if exists get_age;

delimiter//

create function get_age(start_age int(4),end_age int(4)) returns int(4)

begin

declare age int(4) default 0;

set age = floor(start_age+rand()*end_age);

return age;

end//

delimiter;

3、创建一个存储函数,用来随机生成电话号码

drop function if exists `phone`;

delimiter //

create definer=root@localhost function phone() returns char(11) charset utf8

begin

declare head varchar(3) default '';

declare bodys varchar(225) default '130 131 132 133 134 135 136 137 138 139 186 187 189 151 157';

declare starts int;

declare num varchar(8);

declare phone_num varchar(11);

set starts = 1 + floor(rand()*15)*4;

set head =trim(substring(bodys,starts,3));

set num = FLOOR(RAND()*500000000 + 5000000000);

set phone_num = concat(head,num);

return phone_num;

end//

delimiter;

4、创建一个存储函数,用于随机获取地址表中的地名

drop function if exists get_address;

delimiter//

create function get_address() returns varchar(20)

begin

declare myaddress varchar(20) default '';

declare count int default 0;

declare j int default 0;

select count(id) into count from table_address;

set j = floor(1+rand()*count);

select address into myaddress from table_address where id=j;

return myaddress;

end//

delimiter;

向学生表中插入1000条数据的存储过程

drop procedure if exists insert_data;

delimiter//

create procedure insert_data(in num int)

begin

declare _name varchar(20) default '';

declare _sex varchar(10) default '';

declare _age int(4) default 0;

declare _mobile varchar(20) default '';

declare _address varchar(20) default '';

declare _class varchar(10) default '';

declare i int default 0;

truncate table students;

#delete from students;

while i

set _name = get_name(2);

set _sex = get_sex();

set _age = get_age(18,30);

set _mobile = phone();

set _address = get_address();

set _class = concat('17',floor(43+rand()*7));

insert into students(name,sex,age,mobile,address,class) values(_name,_sex,_age,_mobile,_address,_class);

set i = i + 1;

end while;

end//

delimiter;

call insert_data(1000);

八、数据库语法

select floor(1+rand()*3); #在1-3之间随机取一个数

select floor(1+rand()*9); #在1-9之间随机取一个数

select floor(1+rand()*900); #在1-900之间随机取一个数

### 9、if语句

语法:

if 条件 then

符合条件执行的;

end if;

if 条件 then

符合条件执行的;

else

不符合条件执行的;

end if;

### 10、case语句 选择语句

语法:

case 变量

when 具体值 then

符合该值的执行代码;

when 具体值 then

符合该值的执行代码;

when 具体值 then

符合该值的执行代码;

....

else

都不符合执行代码;

end case;

### 11、变量

定义变量语法:

declare 变量名 数据类型;

declare 变量名 数据类型 default 默认值;

设置变量语法:

set 变量名 = 值;

例如:

x + 10 = 30,求未知数x;

x + y = 100,求解x和y;

x = 10;

y = 90;

### 12、while循环

语法:

while 条件 do

循环体代码

end while;

备注:

条件为真true,即执行循环体内的代码;条件为假false,即跳出循环;

备注:

随机数的产生:

rand() 随机数的取值范围是0~1,并不包含1;

round()四舍五入

需要n~m范围内的随机数: round( rand() * (m-n) + n )

rand()*100 0~100,不包含100

round(rand() * 100) 0~100,包含100

70~168: round(rand() * 98 + 70)

字符串拼接:

concat(arg1,age2,age3......);

concat("hello", " world!"); # "hello world!"

concat(10,"-haha"); # "10-haha"

concat("呵呵","哈哈","hello"); # "呵呵哈哈hello"

除法、取余:

除法(/)

取余(%)

mysql数据库 存储过程_Mysql数据库-存储过程相关推荐

  1. Mysql常用词汇_mysql 数据库常用单词

    说明:以下单词可能有多种含义,此文档只针对编程做解释.单词不多,熟能生巧,每日认真读读写写,效果不错.如有错误,请谅解并指出,谢谢大家! 黄金超 2017-4-7 连接MySQL数据库: mysql ...

  2. mysql删除原则_MySQL数据库的增删选查

    数据库是专门存储数据对象的容器,这里的数据对象包括表.视图.触发器.存储过程等,其中表是最基本的数据对象. 创建数据库 在 MySQL 数据库中存储数据对象之前,先要创建好数据库. 语法: creat ...

  3. 熟悉mysql基本数据库操作系统_MySQL数据库的基本操作

    1.数据库和数据库对象 数据库分为系统数据库和用户数据库. 数据库对象是指存储.管理和使用数据库的不同结构形式,主要包括表.视图.存储过程.函数.触发器和事务. 1.系统数据库 系统数据库是值安装完M ...

  4. mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记

    以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库 查看所有数据库:SHOW DATABASES 创建数据库:CREATE DA ...

  5. mysql权限表_MySQL 数据库赋予用户权限操作表

    MySQL清空数据库的操作:truncate table tablename; MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据 ...

  6. mysql合集_Mysql数据库知识点合集

    一.Mysql数据库的操作命令 1.登录:mysql -h 服务器地址 -u 登录名 -p 密码 mysql -h 127.0.0.1 -u root -p root 2.数据库备份:mysqldum ...

  7. mysql数据库技术_MySQL数据库操作技术大全

    MySQL的基本操作可以包括两个方面: (1)MySQL常用语句如高频率使用的增删改查(CRUD)语句 (2)MySQL高级功能,如存储过程,触发器,事务处理等. 而这两个方面又可以细分如下: Con ...

  8. mysql组件下载_MySQL数据库组件(MyDAC)

    MyDAC是一款功能强大,专业实用的MySQL数据库组件,软件不但可以直接进入到MySQL的数据服务器,而且软件还可以用于检测连接损耗和隐式重新某些操作局部故障转移.有需要的小伙伴欢迎来西西下载体验. ...

  9. mysql exec函数_mysql exec 存储过程

    MySql存储过程 create proc 名称 参数列表 as 代码段 exec 存储过程名称 参数列表 要点: 1.可以使用output修饰参数 2.可以使用默认值,注意需要将最后的参数设置成默认 ...

  10. mysql数据库实战_mysql数据库实战系列--再入泥坑

    开源数据库MySQL DBA运维实战 第2章 SQL1 作者:帽子先生 SQL语言分类 SQL(Structured Query Language 即结构化查询语言) SQL语言主要用于存取数据.查询 ...

最新文章

  1. django(七)之数据库表的单表-增删改查QuerySet,双下划线
  2. VS2019中接连MySQL全部过程
  3. 修改注册表 为右键添加快捷命令
  4. [转]那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable
  5. MySQL自定义查询字段排序
  6. 创建控制文件后的疑难解答
  7. 全国省市区数据库sql
  8. matlab中uigetfile的使用
  9. 叶俊|知行合一创纪录|杭州创纪录企业管理咨询有限公司董事长简介
  10. POI Word表格复制行2种方式(copy()、手动复制行)
  11. 本本CPU控制让游戏3D效果最佳境界
  12. 4 Day:MBR使用硬盘
  13. 视频原理和FFmpeg
  14. TJA1043 CanTrcv
  15. 骑士amp;魔法 java_程序员穿越异世界,骑士与魔法!
  16. Leetcode题347、前K个高频元素(Python题解)Amazon面试题
  17. 高仿微信6.5.7(融云版)
  18. TFN系列超声波探伤仪使用评价怎么样?好不好用?
  19. 展示和隐藏后缀名操作
  20. 网络舆情分析关键词怎么获取的系统平台方法

热门文章

  1. 北京邮电大学计算机院专业录取分数线,2017年北京邮电大学计算机科学与技术专业在北京录取分数线...
  2. 从零配置腾讯云cdn加速服务!
  3. 专升本/四六级/考研英语学习资源汇总
  4. c语言基础知识 入门必看(保姆级教学)
  5. Vue3中获取鼠标在浏览器x轴和y轴的位置
  6. javascript表单提交的内容显示在表格中
  7. 电阻触摸屏 linux 校准软件,android 电阻单点触摸屏校准
  8. 不同转录组测序方法总结
  9. 10X Genomics单细胞转录组测序
  10. 为什么公司宁可高薪招一个新员工,也不愿意给老员工涨一点工资?