我们将我们的客户端的编码设置为utf8,客户端和客户端连接设为utf8,表设计为utf8,字段设置成utf8。

如果我们的客户端是gbk的编码,那我们就通知mysql服务器客户端和客户端连接是gbk的就行了。这样也不会出现乱码。

会话变量和全局变量

查看会话变量

show session variables [like ‘%关键字%‘]

查看字段的变量名称select @@session.变量名称。

指定会话变量的值 set @@session.变量名称=值 也可以使用set 变量名称=值

全局变量

全局变量一旦设置在所有的客户端都有效。

查看全局变量

show global variables [like ‘%关键字%‘]

select @@global.变量名称

指定全局变量的值 set global 变量名称=值 set @@global.变量名称=变量值。

用户定义变量 set @变量名称=值;比如set name=‘张三‘

存储过程

存储过程是为了完成特定功能的sql语句集,经过编译后存储在数据库中,用户通过指定存储过程的名称并给定参数来调用并执行他。有点类似于自定义函数。

优点:

1增强了sql语言的功能和流程性,我们可以完成复杂的判断和运算

2存储过程创建完成后,可以多次被调用。

3 存储过程能实现较快的执行速度,如果一个操作包含大量的事务,那么存储过程速度要快很多,因为存储过程是预编译的,首次运行mysql的优化器会对其进行优化,而批量处理事务每次都要进行编译和优化,速度相对慢一些。

4 能减少网络的流量,因为发送的数据少。

5 存储过程相对来说安全。

存储过程的存储步骤

1 首先选中一个数据库,存储过程是放在某个数据库下的。use 数据库;

2 改变分割符,不要让;作为执行结束的标记 使用:delimiter $$ 将$$作为sql语句执行的结束符。

3 创建一个存储过程

create procedure 名称()

begin

sql语句;

sql语句;

end

$$

4 恢复语句执行的分割符delimiter ;

5 执行存储过程 call 名称[(参数1,参数2,...)];

以上是存储过程的基本用法,当然存储过程是复杂的,接下来我们通过细节讲解来学习存储过程。

我们可以在存储过程中定义局部变量,定义局部变量可以使用:

declare 变量名称 类型(长度),比如:

create procedure 名称()

begin

declare name varchar(20) default ‘‘;

select name;

end

$$

调用:call 名称;

我们也能使用

create procedure 名称()

begin

declare stu_no int;

set stu_no=10;

select stu_no;

end

$$;

调用: call 名称;

我们在创建存储过程时可以传递参数。

参数的类型:

IN:输入参数,表示该参数的值必须在调用存储过程之前指定,在存储过程中修改的值不能被返回。

create procedure 名称(IN number int)

begin

select number;

set number=number+1;

select number;

end

$$;

delimiter ;

set @number=3;

call 名称(@number)

我们在重新查询number的值

select @number 我们发现number的值还是3,并没有发生什么改变,由此可见IN类型的参数在执行完存储过程后他的值并不会发生任何变化,有点类似php的局部变量。

OUT:输出参数,该值可以在存储过程内部改变,并且可以返回,往往是用于获取存储过程里的参数值。

当我们传进入一个变量值是存储过程不认识,在重新赋值后就会有值了。

INOUT:输入输出参数,该值可以在调用时指定,并可修改和返回,是in和out的综合使用。

mysql中流程控制语句之选择语句

if分支

IF condition1 THEN

要执行的语句;

ELSEIF condition2 THEN

要执行的语句;

ELSE

要执行的语句;

ENDIF

和存储过程结合

create procedure showage(in age int)

begin

if age>18 then

select "成年人";

else

select "未成年人";

end if;

end

$$

set @age=19;

call showage(@age);

case分支

CASE case_value

WHEN when_value THEN

要执行的语句;

[WHEN when_value THEN 要执行的语句]

[ELSE 要执行的语句]

END CASE

其中case_value参数表示条件判断变量,when_value 表示变量取值。

create procedure addsalary(IN emno int)

begin

declare add int;

case emno

when 1001 then

set add=100;

when 1002 then

set add=200;

when 1003 then

set add=300;

else

set add=500;

end case;

update salary set money=money+add where emno=emno;

end;

$$

存储过程的使用。

set @emno=1002;

call addsalary(emno);

我们也可以把控制流程写到sql语句中

ifnull函数的使用,ifnull(exp1,exp2) 如果exp1为空值,那么返回的结果是exp2,如果exp1不为空,返回的结果就是exp1。

mysql中流程控制语句之循环语句

while语句

create procedure addnum()

begin

declare i int default 1;

declare sum int default 0;

while i < 100 do

set sum=sum+i;

set i=i+1;

end while

select sum;

end;

$$;

调用:call addnum

repeat .....until

create procedure updateGender()

begin

declare imin int default 1;

declare imax int default 1;

select min(emp_no) into imin from employees;

select max(emp_no) into imax from employees;

repeat

if imin % 2=0 then

update employees set gender=‘F‘ where emp_no=imin;

end if;

set imin=imin+1;

until imin >imax;

end repeat;

end;

$$

loop....end loop

create procedure updateHire()

begin

declare imin int default 1;

declare imax int default 1;

select min(emp_no) into imin from employees;

select max(emp_no) into imax from employees;

myloop:loop

if imin % 2=0 then

update employees set hire_date=‘1999-12-11‘ where emp_no=imin;

end if;

set imin=imin+1;

if imin > imax then

leave myloop;

end if;

end loop;

end;

$$

mysql中存储过程中捕获错误和处理

如果这样写存储过程,会报错。我们可以捕获这个错误。

存储过程的管理

show procedure status where db="库名";显示我们的数据库下有那些存储过程。

查看数据库下存储过程的列表

use 数据库

select specific_name from mysql.proc;

查看存储过程的创建过程

show create procedure 名称

select specifie_name,body from mysql.proc where specific_name="名称";

删除存储过程

drop procedure if exists 名称

存储函数

首先查看是否已经开启了创建函数的功能

show variables like "%fun%";

如果值为off,那么需要开启

set global log_bin_trust_function_creators=1;

创建函数的语法

create function 函数名称(变量1,变量2)

returns 数据类型

begin

执行的程序的代码

return 数据;

end;

求两个数的和

可以通过show create function 函数名称 可以看见创建的代码。

可以通过drop function if exists 函数名称;

下面的这个函数可以判断用户输入用户名称和密码是否登录成功。

存储函数和存储过程的区别

我们的存储函数必须要有返回值。

mysql 进阶到高级_mysql的高级进阶(一)相关推荐

  1. mysql密码高级_MySQL数据库高级操作(图文详解)

    数据表高级操作 准备工作:安装MySQL数据库 create database CLASS; use CLASS; create table TEST (id int not null,name ch ...

  2. mysql数据库查询游戏_MySQL数据库高级查询和多表查询

    MySQL多表查询 添加练习表 -- 用户表(user) CREATE TABLE `user`( `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id( ...

  3. mysql查询高于平均_Mysql之高级查询

    Mysql之高级查询 一.函数&分组查询 1.函数 Mysql已经定义好的,可以实现一定功能的代码块 日期函数.数字函数.字符函数.聚合函数 聚合函数:聚合函数对整体进行运算,通常返回的结果只 ...

  4. mysql查询显示技巧_MYSQL SQL高级查询技巧

    1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...

  5. mysql运维高级_Mysql DBA 高级运维学习之路-mysql建表语句及表知识

    1.创建表 1.1 建表的基本命令语法 create table( , --- ) 1.2 创建student表 (1)在linzhongniao库中创建student表 mysql> use ...

  6. mysql 以 db 结尾_MySQL的高级部分

    1. MySQL的事务 (1)存储引擎的介绍 介绍:当客户端发送一条SQL语句给服务器时,服务器端通过缓存.语法检查.校验通过之后,然后会通过调用底层的一些软件组织,去从数据库中查询数据,然后将查询到 ...

  7. mysql中常用动词_Mysql DBA 高级运维学习之路-sql语言介绍及分类

    1.什么是sql SQL英文全称是Structured Query Language,中文意思是结构化查询语言.它是一种对关系型数据库中的数据进行定义和操作的语言方法.是大多数关系数据库管理系统所支持 ...

  8. mysql数据库技术答案_MySQL数据库高级技术高校邦2020答案

    下列各组物质中,属于同分异构体的是() 有机物A的分子式为C9H10O2,A在光照条件下生成的一溴代物B,可发生如下转化关系(无机产物略): 其中K物质与氯 (创新预测题)塑化剂是工业上被广泛使用的高 ...

  9. IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略

    IT:后端进阶技术路线图(初级→中级→高级).后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介.技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略 目录 后端 ...

最新文章

  1. 专用计算机教室设备,计算机教室专用规章制度
  2. SAP MM ME21N 创建委外采购PO报错 - Not possible to determine any components - 之对策
  3. 如何使python print输出不换行
  4. Solaris IPMP 配置
  5. 深入理解ElasticSearch(八):索引管理
  6. Fast Matrix Factorization for Online Recommendation with Implicit Feedback论文代码分析
  7. datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集
  8. UOJ351 新年的叶子
  9. python偏函数理解_Python中的偏函数
  10. spring中配置数据源
  11. angular乱码_号外!Angular 中文文档已同步翻译至 7.0
  12. 使用jpeglib直接把NV12转为jpeg文件的代码
  13. 基于注意力机制的循环网络进行层级性多元标签文本分类
  14. 小鸟云服务器linux版本的登陆
  15. VIVO内置应用卸载指南(IQOO NEO5为例)
  16. 10种世界上最美的花
  17. EAS\BOS 开发 消息中心webservice接口使用说明
  18. 歌曲背後真實的故事 (看完这个故事我流泪了~~~)
  19. 20款精美APP和Web设计模板素材(附演示链接)
  20. 【建议收藏系列】爆肝3w字带你理解什么叫运维~

热门文章

  1. android应用开发全程实录出版
  2. pku2229--sumsets(zjgsu,分花)
  3. 日记 [2007年01月24日]服务器加强安全
  4. Android-Spinner的使用以及两种适配器
  5. Leetcode1685. 有序数组中差绝对值之和[C++题解]:前缀和和差的绝对值之和
  6. c语言影碟出租程序设计总结,vc++影碟出租系统的设计与开发
  7. 最好的oracle笔记,Oracle学习笔记(一)
  8. linux中sleep再循环里,Linux sleep 语句以及循环 测试负载
  9. python import_Python Import 详解
  10. python爬取有道词典_利用Python3和Charles爬取有道词典,生成翻译exe单文件