mysql 进阶到高级_mysql的高级进阶(一)
我们将我们的客户端的编码设置为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的高级进阶(一)相关推荐
- mysql密码高级_MySQL数据库高级操作(图文详解)
数据表高级操作 准备工作:安装MySQL数据库 create database CLASS; use CLASS; create table TEST (id int not null,name ch ...
- mysql数据库查询游戏_MySQL数据库高级查询和多表查询
MySQL多表查询 添加练习表 -- 用户表(user) CREATE TABLE `user`( `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id( ...
- mysql查询高于平均_Mysql之高级查询
Mysql之高级查询 一.函数&分组查询 1.函数 Mysql已经定义好的,可以实现一定功能的代码块 日期函数.数字函数.字符函数.聚合函数 聚合函数:聚合函数对整体进行运算,通常返回的结果只 ...
- mysql查询显示技巧_MYSQL SQL高级查询技巧
1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...
- mysql运维高级_Mysql DBA 高级运维学习之路-mysql建表语句及表知识
1.创建表 1.1 建表的基本命令语法 create table( , --- ) 1.2 创建student表 (1)在linzhongniao库中创建student表 mysql> use ...
- mysql 以 db 结尾_MySQL的高级部分
1. MySQL的事务 (1)存储引擎的介绍 介绍:当客户端发送一条SQL语句给服务器时,服务器端通过缓存.语法检查.校验通过之后,然后会通过调用底层的一些软件组织,去从数据库中查询数据,然后将查询到 ...
- mysql中常用动词_Mysql DBA 高级运维学习之路-sql语言介绍及分类
1.什么是sql SQL英文全称是Structured Query Language,中文意思是结构化查询语言.它是一种对关系型数据库中的数据进行定义和操作的语言方法.是大多数关系数据库管理系统所支持 ...
- mysql数据库技术答案_MySQL数据库高级技术高校邦2020答案
下列各组物质中,属于同分异构体的是() 有机物A的分子式为C9H10O2,A在光照条件下生成的一溴代物B,可发生如下转化关系(无机产物略): 其中K物质与氯 (创新预测题)塑化剂是工业上被广泛使用的高 ...
- IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略
IT:后端进阶技术路线图(初级→中级→高级).后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介.技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略 目录 后端 ...
最新文章
- 专用计算机教室设备,计算机教室专用规章制度
- SAP MM ME21N 创建委外采购PO报错 - Not possible to determine any components - 之对策
- 如何使python print输出不换行
- Solaris IPMP 配置
- 深入理解ElasticSearch(八):索引管理
- Fast Matrix Factorization for Online Recommendation with Implicit Feedback论文代码分析
- datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集
- UOJ351 新年的叶子
- python偏函数理解_Python中的偏函数
- spring中配置数据源
- angular乱码_号外!Angular 中文文档已同步翻译至 7.0
- 使用jpeglib直接把NV12转为jpeg文件的代码
- 基于注意力机制的循环网络进行层级性多元标签文本分类
- 小鸟云服务器linux版本的登陆
- VIVO内置应用卸载指南(IQOO NEO5为例)
- 10种世界上最美的花
- EAS\BOS 开发 消息中心webservice接口使用说明
- 歌曲背後真實的故事 (看完这个故事我流泪了~~~)
- 20款精美APP和Web设计模板素材(附演示链接)
- 【建议收藏系列】爆肝3w字带你理解什么叫运维~
热门文章
- android应用开发全程实录出版
- pku2229--sumsets(zjgsu,分花)
- 日记 [2007年01月24日]服务器加强安全
- Android-Spinner的使用以及两种适配器
- Leetcode1685. 有序数组中差绝对值之和[C++题解]:前缀和和差的绝对值之和
- c语言影碟出租程序设计总结,vc++影碟出租系统的设计与开发
- 最好的oracle笔记,Oracle学习笔记(一)
- linux中sleep再循环里,Linux sleep 语句以及循环 测试负载
- python import_Python Import 详解
- python爬取有道词典_利用Python3和Charles爬取有道词典,生成翻译exe单文件