mySQL教程 第7章 存储过程和函数

第7章 存储过程和函数

存储过程和存储函数

MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines。

1. MySQL存储过程和函数的区别

函数只能通过return语句返回单个值或者表对象。而存储过程不允许执行return,但是通过out参数返回多个值。 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。

函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少

一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。

存储过程应用实例

1. 创建没有参数的存储过程

创建存储过程取得最高考分

create PROCEDURE getMaxMark()

begin

select max(mark) 最高分 from `TScore`;

end

调用存储过程

call getMaxMark();

clip_image001

2. 创建带输入参数的存储过程

以下存储过程能够输入的学生号查出该学生的信息 参数Sid代表学号,IN代表输入参数。

CREATE PROCEDURE getStudentByID(IN sid varchar(15))

BEGIN

select * from `TStudent` where studentID=sid;

END

调用该参数

call getStudentByID('00009')

clip_image003

3. 创建带输入和输出参数的存储过程

创建存储过程,能够输出指定课程的最高分

create PROCEDURE getMaxMarkBySubject(IN subName varchar(30),OUT maxMark int)

begin

select MAX(mark) into maxMark from `TScore` a join `TSubject` b on a.`subJectID`=b.`subJectID`

where b.`subJectName`=subName;

end

调用存储过程,将取出的最大值放到变量@maxScore

CALL getMaxMarkBySubject('计算机网络',@maxScore);

select @maxScore 计算机网络最高分;

clip_image004

CALL getMaxMarkBySubject('数据结构',@maxScore);

select @maxScore 数据结构最高分;

clip_image005

4. 思考:创建存储过程,能够根据指定学号删除学生记录

5. 删除存储过程

drop PROCEDURE `getMaxMarkBySubject`

6. 查看创建的存储过程

clip_image006

创建存储函数

7. 根据学生成绩判断是否优秀

以下函数能够根据输入值范围输出成绩是否优良差。

create FUNCTION getGrad1(score int)

RETURNS varchar(50)

BEGIN

return IF(score>90,'成绩优秀',IF(score<90 and score>80,'成绩良好',IF(score<80 and score>70,'成绩一般',IF(score<70 and score>60,'成绩及格','不及格'))));

END

在查询中使用定义的函数

select b.sname 姓名,mark 分数,getGrad1(mark) 成绩级别 from `TScore` a join `TStudent` b on a.`StudentID`=b.`StudentID`

clip_image007

8. 取汉字拼音首字母的函数

先创建获取汉字拼音函数需要用到的表

DROP TABLE IF EXISTS `pinyin`;

CREATE TABLE `pinyin` (

`letter` char(1) NOT NULL,

`chinese` char(1) NOT NULL,

PRIMARY KEY (`letter`)

) ENGINE=MyISAM DEFAULT CHARSET=gbk;

INSERT INTO `pinyin` VALUES ('A','驁'),('B','簿'),('C','錯'),('D','鵽'),('E','樲'),('F','鰒'),('G','腂'),

('H','夻'),('J','攈'),('K','穒'),('L','鱳'),('M','旀'),('N','桛'),('O','漚'),('P','曝'),('Q','囕'),('R','鶸'),

('S','蜶'),('T','籜'),('W','鶩'),('X','鑂'),('Y','韻'),('Z','咗');

创建获取汉字拼音的函数

DROP FUNCTION IF EXISTS `PINYIN`

CREATE FUNCTION PINYIN(str CHAR(255))

RETURNS char(255)

BEGIN

DECLARE hexCode char(4);

DECLARE pinyin varchar(255);

DECLARE firstChar char(1);

DECLARE aChar char(1);

DECLARE pos int;

DECLARE strLength int;

SET pinyin = '';

SET strLength = CHAR_LENGTH(LTRIM(RTRIM(str)));

SET pos = 1;

SET @str = (CONVERT(str USING gbk));

WHILE pos <= strLength DO

SET @aChar = SUBSTRING(@str,pos,1);

SET hexCode = HEX(@aChar);

IF hexCode >= "8140" AND hexCode <= "FEA0" THEN

SELECT letter into firstChar

FROM pinyin

WHERE chinese >= @aChar

LIMIT 1;

ELSE

SET firstChar = @aChar;

END IF;

SET pinyin = CONCAT(pinyin,firstChar);

SET pos = pos + 1;

END WHILE;

RETURN UPPER(pinyin);

END

使用函数获取用户的姓名拼音首写字母

select sname 姓名,pinyin(sname) 拼音首字母 from `TStudent`

clip_image008

9. 思考:更改用户邮箱,将用户的邮箱地址设置姓名的拼音缩写

10. 数字转汉字

以下函数能够把阿拉伯数字转化成财务中用到的汉字

create FUNCTION tohanzi (n_LowerMoney DECIMAL)

RETURNS VARCHAR(120)

BEGIN

Declare v_LowerStr VARCHAR(200) ;

Declare v_UpperPart VARCHAR(200) ;

Declare v_UpperStr VARCHAR(200) ;

Declare i_I int ;

set v_LowerStr = LTRIM(RTRIM(ROUND(n_LowerMoney,2 ) ) ) ;

set i_I = 1 ;

set v_UpperStr = '' ;

while ( i_I <=char_length(v_LowerStr ) ) do

set v_UpperPart = CONCAT( case substring(v_LowerStr,char_length(v_LowerStr) - i_I + 1,1 )

WHEN '.' THEN '元'

WHEN '0' THEN '零'

WHEN '1' THEN '壹'

WHEN '2' THEN '贰'

WHEN '3' THEN '叁'

WHEN '4' THEN '肆'

WHEN '5' THEN '伍'

WHEN '6' THEN '陆'

WHEN '7' THEN '柒'

WHEN '8' THEN '捌'

WHEN '9' THEN '玖'

END,

case i_I

WHEN 1 THEN '分'

WHEN 2 THEN '角'

WHEN 3 THEN ''

WHEN 4 THEN ''

WHEN 5 THEN '拾'

WHEN 6 THEN '佰'

WHEN 7 THEN '仟'

WHEN 8 THEN '万'

WHEN 9 THEN '拾'

WHEN 10 THEN '佰'

WHEN 11 THEN '仟'

WHEN 12 THEN '亿'

WHEN 13 THEN '拾'

WHEN 14 THEN '佰'

WHEN 15 THEN '仟'

WHEN 16 THEN '万'

ELSE ''

END );

set v_UpperStr =CONCAT( v_UpperPart , v_UpperStr) ;

set i_I = i_I + 1 ;

end while;

set v_UpperStr = REPLACE(v_UpperStr,'零拾','零') ;

set v_UpperStr = REPLACE(v_UpperStr,'零佰','零') ;

set v_UpperStr = REPLACE(v_UpperStr,'零仟','零') ;

set v_UpperStr = REPLACE(v_UpperStr,'零零零','零') ;

set v_UpperStr = REPLACE(v_UpperStr,'零零','零') ;

set v_UpperStr = REPLACE(v_UpperStr,'零角零分','整') ;

set v_UpperStr = REPLACE(v_UpperStr,'零分','整') ;

set v_UpperStr = REPLACE(v_UpperStr,'零角','零') ;

set v_UpperStr = REPLACE(v_UpperStr,'零亿零万零元','亿元') ;

set v_UpperStr = REPLACE(v_UpperStr,'亿零万零元','亿元') ;

set v_UpperStr = REPLACE(v_UpperStr,'零亿零万','亿') ;

set v_UpperStr = REPLACE(v_UpperStr,'零万零元','万元') ;

set v_UpperStr = REPLACE(v_UpperStr,'万零元','万元') ;

set v_UpperStr = REPLACE(v_UpperStr,'零亿','亿') ;

set v_UpperStr = REPLACE(v_UpperStr,'零万','万') ;

set v_UpperStr = REPLACE(v_UpperStr,'零元','元') ;

set v_UpperStr = REPLACE(v_UpperStr,'零零','零') ;

if ( '元' = substring(v_UpperStr,1,1)) then

set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1));

end if;

if ( '零' = substring(v_UpperStr,1,1)) then

set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1)) ;

end if;

if ( '角' = substring(v_UpperStr,1,1)) then

set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1)) ;

end if;

if ( '分' = substring(v_UpperStr,1,1)) then

set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1)) ;

end if;

if ('整' = substring(v_UpperStr,1,1)) then

set v_UpperStr = '零元整' ;

end if;

return v_UpperStr;

END

select tohanzi(20321)

clip_image009

11. 随机产生姓名的函数

该函数,使用三个字符串,存放用户的姓名,使用随机函数从姓名中随机排列组合成人名。

create function create_name()

RETURNS varchar(3)

begin

DECLARE LN VARCHAR(300);

DECLARE MN VARCHAR(200);

DECLARE FN VARCHAR(200);

DECLARE LN_N INT;

DECLARE MN_N INT;

DECLARE FN_N INT;

SET LN='李王张刘陈杨黄赵周吴徐孙朱马胡郭林何高梁郑罗宋谢唐韩曹许邓萧冯曾程蔡彭潘袁于董余苏叶吕魏蒋田杜丁沈姜范江傅钟卢汪戴崔任陆廖姚方金邱夏谭韦贾邹石熊孟秦阎薛侯雷白龙段郝孔邵史毛常万顾赖武康贺严尹钱施牛洪龚';

SET MN='伟刚勇春菊毅俊峰强军平保东文辉力明永健世广志瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥新利筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒义兴良海山仁波宁贵福生龙元全国胜学祥亮政谦亨奇固之岚苑富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪清飞彬娜静淑惠珠翠雅芝妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦素伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘';

SET FN='伟刚勇毅俊云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧才发武丽琳轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德河哲江超浩璐娅琦晶裕华慧巧美婕馨影荔枝思心邦承乐绍功松善厚庆磊民友玉萍红娥玲芬芳燕彩兰凤洁梅秀娟英行时泰盛雄琛钧冠策腾楠榕风航弘峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘';

SET LN_N=CHAR_LENGTH(LN);

SET MN_N=CHAR_LENGTH(MN);

SET FN_N=CHAR_LENGTH(FN);

return Concat(substring(LN,ceil(rand()*LN_N),1),substring(MN,ceil(rand()*MN_N),1),substring(FN,ceil(rand()*FN_N),1));

end

调用函数产生姓名

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名 union

select create_name() 随机姓名

查看结果

clip_image010

12. 查看创建的函数

clip_image011

13. 删除存储的函数

drop FUNCTION `tohanzi`

在存储过程和函数中使用变量、判断和循环

MySQL中变量、判断和循环只能在存储过程和存储函数中使用。

14. 在存储过程中使用循环、变量

写一个存储过程,能够给TStudent表插入指定数量的学生记录。身份证号随机产生,姓名随机产生,性别随机,班级随机产生。这其中用到了随机函数,以及上面创建的产生姓名的函数。生日有随机函数产生,范围在1980-1989年,用户的邮箱由用户的姓名首写字母组合而成。

如果已有存储过程,必须先删除

drop procedure addStudent

创建的存储过程

create procedure addStudent(in num int)

begin

declare i int;

set i=1;

delete from TStudent;

while num>=i do

insert TStudent values (

LPAD(convert(i,char(5)),5,'0'),

create_name(),

if(ceil(rand()*10)%2=0,'男','女'),

RPAD(convert(ceil(rand()*1000000000000000000),char(18)),18,'0'),

Concat('198',convert(ceil(rand()*10),char(1)),'-',LPAD(convert(ceil(rand()*12),char(2)),2,'0'),'-',LPAD(convert(ceil(rand()*30),char(2)),2,'0')),

Concat(PINYIN(sname),'@hotmail.com'),

case ceil(rand()*3) when 1 then '网络与网站开发' when 2 then 'JAVA' ELSE 'NET' END,

NOW());

set i=i+1;

end while;

select * from TStudent;

end

调用存储过程

call addStudent(100)

clip_image013

15. 创建使用while的存储过程插入学生成绩

插入了100名学生后,执行以下命令。

创建存储过程,能够插入为学生插入分数。存储过程使用两个循环,分数在50-100分之间,使用随机数实现。

drop procedure fillSore

创建存储过程

create procedure fillSore()

begin

DECLARE St_Num INT;

DECLARE Sb_Num INT;

DECLARE i1 INT default 1;

DECLARE i2 INT default 1;

delete from TScore;

select count(*) into St_Num from TStudent;

select count(*) into Sb_Num from TSubject;

while St_Num>=i1 do

set i2=1;

while Sb_Num>=i2 do

insert TScore values

(LPAD(convert(i1,char(5)),5,'0'),LPAD(convert(i2,char(4)),4,'0'),ceil(50+rand()*50));

set i2=i2+1;

END WHILE;

set i1=i1+1;

END WHILE;

End

调用存储过程

call fillSore()

查询

select * from TScore

clip_image014

16. 创建使用if的函数

If函数支持多层嵌套

create FUNCTION getGrad2(score int)

RETURNS varchar(50)

BEGIN

declare grad varchar(50);

if score>90 then

set grad='成绩优秀';

else if score>80 then

set grad='成绩良好';

else if score>70 then

set grad='成绩一般';

else set grad='刚刚及格';

end if;

end if;

end if;

return grad;

END

使用函数查询数据库

select b.sname 姓名,mark 分数,getGrad2(mark) 成绩级别

from `TScore` a join `TStudent` b on a.`StudentID`=b.`StudentID` limit 5

clip_image015

17. 创建使用case的函数

该函数根据学生的分数,给出评价。

create FUNCTION getGrad3(score int)

RETURNS varchar(50)

BEGIN

declare grad varchar(50);

declare mark int;

set mark=ceil(score/10);

case mark

when 9 then set grad='成绩优秀';

when 8 then set grad='成绩良好';

when 7 then set grad='成绩一般';

else set grad='刚刚及格';

end case;

return grad;

END

测试函数

select b.sname 姓名,mark 分数,getGrad3(mark) 成绩级别

from `TScore` a join `TStudent` b on a.`StudentID`=b.`StudentID` limit 5

clip_image016

查看存储过程和存储函数的语句

运行一下命令可以查看创建fillSore存储过程语句

18. 使用show create查看存储过程内容

show create procedure fillSore

clip_image017

clip_image018

19. 使用管理工具产生查看创建存储过程的语句

clip_image019

clip_image021

作业:

20. 统计男生和女生人数

21. 统计各班人数

22. 把重姓的学生找出来

23. 找出身份证号末尾是偶数的学生。

24. 查询出生年月在1985-01-00到1988-01-00之间的学生。

25. 统计各班“计算机网络”平均分

26. 找出“计算机网络”不及格的男同学

 

广告

titel263

12353

system63

system373

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单的ajax上传商品功能使用SevletFileUpload和FormData

目录1、先上图2、使用ServletFileUpload读取前端发送过来的请求2.1、maven依赖2.2、SevletFileUpload的一些基本操作3、前端代码4、 Servlet4.1、后端返回商品列表4.2、添加商品4.3、商品DAO层4.3.1、 ProductDao4.3.2、ProductDaoimpl1、先上图 2、使用ServletFileUpload读取前…

JavaScript实现数据分页

目录分页效果图如何分页代码分页 当表单数据过多时&#xff0c;比较不容易浏览。这个时候就需要分页查看。 效果图 如何分页 1、首先确定总记录条数 len 2、单页浏览条数 page_number 3、页数 Total_pageslen % page_number 0 ? len / page_number : len / page_number 1;…

日均互动50万次 微信的营销的成功之道

微信公众平台已成为目前最热的企业营销推广平台&#xff0c;每天都有大量互联网公司和传统企业进驻&#xff0c;使用公众账号通过移动端和粉丝互动&#xff0c;不仅可以群发文字、图片、视频、语音等信息内容&#xff0c;还可以进行一对一的深入沟通。 现在微信公众平台已经成为…

微信开发1之PHP成功获取微信支付的Token

相信不少同学在开发“微信支付”的时候遇到了无法获取Token的难题&#xff0c;这里贴出我成功获取Token的php源码&#xff1a; 步骤如下&#xff1a; 1&#xff0c;确保你服务器的php环境是搭建好的&#xff0c;意思就是可以正确运行php程序 2&#xff0c;确定微信Token访问你…

spring IOC基本配置(xml配置和注解配置)

目录Spring IOCIOC是什么IOC可以做什么依赖注入IOC和DIIOC容器Bean配置IOC容器spring ioc 依赖XML配置实例化容器使用容器xml配置详解spring对bean的管理1、创建bean的三种方式2、bean对象的作用范围3、bean对象的生命周期构造函数依赖注入Setter方法依赖注入注解配置使用xml和…

微信开发2之php网页授权登录

在开发之前&#xff0c;我们要确保我们的服务号&#xff0c;在接口权限处&#xff0c;已经获得了网页授权权限 此外&#xff0c;我们还需要有个备案通过的域名&#xff0c;比如"www.myname.com"&#xff0c;并确保你的域名可以访问到你的服务器&#xff0c;于是在公众…

linux6.0 SVN 服务搭建

Linux6.0下安装svn服务器<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Subversion有两种运行方式&#xff0c;一种是基于Apache Http Server&#xff0c;另外一种是Subversion Standalone Server。下面我讲解的是基于Apache H…

Spring+SpringMVC+Mybatis 整合入门

文章目录整体结构结构图Spring 整合SpringMVCweb.xmlSpringMvc.xmlSpring整合MybatisapplicationContext.xml代理接口的配置accountDaoimpl.xml其余代码表现层业务层持久层domain查询效果展示附上spring约束spring约束SpringMVC约束Maven 依赖整体结构 结构图 Spring 整合Sprin…

微信开发3之php模板信息推送

模板信息推送&#xff1a;需要在后台开通了模板消息推送接口 PHP代码如下&#xff1a; <?php $appid"wxxxxxxxxxxxxxxxxxx"; //填写微信后台的appid $appsecret"xxxxxxxxxxxxxxxxxxxxxxxxx"; //填写微信后台的appsecret $TOKEN_URL"…

SpringBoot实现国际化

在哔哩哔哩一位up主视频中学到的&#xff01; 国际化 原理 通过Properties文件配置&#xff0c;配置完后通过Thymeleaf中的#{} 来取代原来的静态资源。例如&#xff1a; spring:# 关闭模板引擎的缓存thymeleaf:cache: falsemessages:encoding: UTF-8## 配置国际化绑定的文…

前端开发1之Node.js以及npm开发环境搭建

关于现今的前端开发&#xff0c;由于微服务架构的普及&#xff0c;前端工程师必须承担更重要的任务。现在的后端工程师无需考虑JS、Ajax和json的解析遍历&#xff0c;或许只需要处理前端请求过来的各种带参请求&#xff08;Get/Post/Patch等&#xff09;&#xff0c;目前许多前…

开源中国iOS客户端学习——(八)网络通信AFNetworking类库

AFNetworking是一个轻量级的iOS网络通信类库&#xff0c;继ASI类库不在更新之后开发者们有一套不错选择&#xff1b; AFNetworking类库和使用教程: https://github.com/AFNetworking/AFNetworking 如果想深入研究有官方文档介绍:http://afnetworking.github.com/AFNetworking/ …

OpenGL 入门第一课 视窗以及三角形

请查看课件教程 下面是我粗劣画的过程图 下面是课件中的过程图 下面是未使用索引缓冲对象&#xff08;EBO&#xff09;的 #define GLEW_STATIC // 这个一定要加不然报错 静态链接库 #include<iostream> #include<GL/glew.h> #include<GLFW/glfw3.h> usin…

玩玩短视频平台和网课平台开发1——腾讯云对象储存COS的初步配置

近一两年来&#xff0c;抖音、快手等以短视频为手段的社交工具红遍了大江南北&#xff0c;腾讯也推出了"微视"平台&#xff0c;希望分一杯羹&#xff1b;传统的直播平台如&#xff1a;斗鱼直播、虎牙直播就更不用说了&#xff0c;甚至涌现了许多主打"知识付费&q…

解决从其它搜索引擎不能直接访问百度页面的问题

由于最近baidu和360又开始互咬了&#xff0c;从其它搜索引擎搜索到百度的结果时又变不能直接访问了&#xff0c;会出现如下界面。 需要手动点击这个链接才能访问&#xff0c;让人非常不爽。因此我写了一个chrome扩展解决这个问题&#xff0c;原理很简单&#xff1a;当遇到这种需…

基于JAVA的校园电商物流云平台 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

OpenGL Sharders(着色器) 入门

着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。 // 顶点着色器 #version 330 core // 0号栏位读取顶点坐标 layout (location 0) in vec3 aPos; //1号栏位读取颜色颜色 …

玩玩机器学习1——ubuntu16.04 64位安装TensorFlow GPU+python3+cuda8.0+cudnn8.0

如今的机器学习运算大多数都是利用gpu进行&#xff0c;包括很大大型游戏&#xff0c;比特币的开采&#xff0c;都离不开GPU的运算&#xff0c;GPU已成为大型运算能力的主要硬件。 大名鼎鼎的机器学习开源框架&#xff0c;如TensorFlow和Caffe&#xff0c;Caffe2都建议使用GPU作…

[linux]Ubuntu12.1下打开terminal的方式

有的人比较习惯使用terminal&#xff0c;喜欢简单的文本窗口&#xff0c;刚使用ubuntu可能还不习惯&#xff0c;这里给出几种打开terminal的方法&#xff1a;1 图形界面中图一就是那个左上角红色方框里的图标&#xff0c;点击后搜索terminal就好了。图二2 使用快捷键Ctrl Alt …

OpenGL 自定义着色器(Shaders)

自定义着色器类 声明 #pragma once#include<string>class Shaders { public:Shaders(const char* vertexPath, const char* fragmentPath);~Shaders();std::string vertexString;std::string fragmentString;const char* vertexSource;const char* fragmentSource;unsi…