补充:增删查改语句在数据库中基本通用,但这篇博客的内容基本是MySQL区别于其它数据库管理系统的知识,也要认真学习。

一、事务

1、含义:在MySQL中,可以通过创建事务来解决一些问题。

2、语法:

#1、开启事务
set autocommit=0; #禁用自动提交功能
#2、编写事务的sql语句
select insert update delete...
#3、结束事务
commit;提交事务
rollback;回滚事务

注意:MySQL默认提交事务,所以要先将autocommit功能禁用。

案例1:模拟张飞给刘备转账这一事件

查询数据库:

模拟转账:

SET AUTOCOMMIT=0;
UPDATE bank b
SET b.money=b.money-500
WHERE b.name='张飞';
UPDATE bank b
SET b.money=b.money+500
WHERE b.name='刘备';

转账后结果:

重新打开一个新标签,重新查询bank表中的内容:

可以看出数据库中的数据并未改变,因为前一个标签修改后还没有提交。

输入rollback,在第一个标签中再次查看表中数据:

可以看出rollback的作用是将数据恢复到上次提交之后的数据库内容。

案例2:savepoint 设置保存点

SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;
DELETE FROM account WHERE id=28;
ROLLBACK TO a;

注意:保存点一定要起别名,便于和rollback搭配使用。

3、事务的隔离级别

                    脏读  不可重复读   幻读
read uncommitted: √ √ √
read committed:   × √ √
repeatable read:   × × √
serializable:   ×       ×       ×

注意:

①mysql中默认 第三个隔离级别 repeatable read

②查看隔离级别:select @@tx_isolation;

③设置隔离级别:set session|global transaction isolation level 隔离级别;

4、各名词含义:

①脏读:其他人看到了更改的数据后,数据被滚回

②不可重复读:数据被滚回之后再次读取数值不同

③幻读:第一次查询数据为三条,在查询后数据条数被其他人更改,再次查询时数据条数与之前不同

二、视图

1、含义:视图是虚拟创建的表,不在库中真实存在,一般是将多个表中的数据合并在一个表中,便于以后直接对其操作。

2、创建视图:

案例:查询张姓学生的学生名和专业名

step1:新建视图v1,并将学生名和专业名存放在其中

CREATE VIEW v1 #先创建视图
AS
SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.`majorid`= m.`id`;

注意:创建好的视图在SQLyog中显示位置如下:

step2:对创建好的视图进行操作,从中筛选符合条件的数据

SELECT * FROM v1 WHERE stuname LIKE '张%';

2、修改视图(重新创建一个新视图):

语法:

CREATE OR REPLACE v1
AS
查询语句;

3、删除视图:

DROP VIEW myv1,myv2;

注意:可同时删除多个视图。

4、查看视图:

DESC v1;
SHOW CREATE VIEW v1;

5、更新视图中的数据:

#1.插入
INSERT INTO myv1 VALUES('张飞','zf@qq.com');
#2.修改
UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';
#3.删除
DELETE FROM myv1 WHERE last_name = '张无忌';

注意:视图数据的修改与表的修改相似,只需将table替换为view即可,但具备以下性质的视图不可被修改:

①包含以下关键字:分组函数、distinct、group  by、having、union或者union all

②常量视图

③Select中包含子查询

④join

⑤from一个不能更新的视图

⑥where子句的子查询引用了from子句中的表

三、变量

1、分类:

系统变量

    全局变量(global)

    会话变量(session)

自定义变量

    用户变量

    局部变量

2、系统变量

①全局变量(所有会话均有效,但数据库重启后消失):

#案例一:查看所有的全局变量
SHOW GLOBAL VARIABLES;
#案例二:查看部分全局变量
SHOW GLOBAL VARIABLES LIKE '%char%';
#案例三:查看指定全局变量
SELECT @@global.autocommit;
#案例四:修改某个全局变量
SET @@global.autocommit=0;

②会话变量(仅对本次会话有效)

注意:其查看、修改与全局变量相似,只需要将global替换为session

3、自定义变量

①用户变量(作用域同会话变量):

#声明并初始化
SET @变量名=值;
#赋值(更新变量的值) #方式很多,仅举其一
SET @变量名=值;
#使用(查看变量的值)
SELECT @变量名;

②局部变量(仅在begin end中使用):

#声明
DECLARE 变量名 类型; 或
DECLARE 变量名 类型 【DEFAULT 值】;
#赋值(更新变量的值)
SET 局部变量名=值;
#使用(查看变量的值)
SELECT 局部变量名;

案例:声明两个用户变量,求和并打印

SET @n=6,@m=3;
SET @sum=@n*@m;
SELECT @sum;

四、存储过程

1、含义:将一组合法的SQL语句封装在一起构成存储过,程类似函数但存在区别。

2、创建语法:

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQL语句)
END

存储过程创建后在SQLyog中位置:

注意:

①参数列表包含:参数模式,参数名,参数类型。

②参数模式:in(输入)、out(输出)、inout(即可输入也可输出)

③如果存储过程体仅仅只有一句话,begin end可省略。

④SQL语句结尾要添加分号,存储过程结尾也要使用结束符号,结束符号要使用delimiter自定义

delimiter $

案例1:创建一个作用为向admin中插入一条新记录的存储过程(不使用参数模式)

DELIMITER $
CREATE PROCEDURE ins()
BEGIN
INSERT INTO admin(username,PASSWORD)
VALUES('Cindy',666666);
END$

调用:

CALL ins()$

注意:调用的 时候以$结尾因为创建存储过程前将结束语句修改为了$。

案例2:创建存储过程实现根据女生名,查询对应的男神信息(使用参数模式IN)

CREATE PROCEDURE cre(IN girl_name VARCHAR(20))
BEGIN
SELECT bo.boyName
FROM boys bo
INNER JOIN beauty b ON bo.id=b.boyfriend_id
WHERE b.name=girl_name;
END$

查询:

CALL rel('关晓彤')$

运行结果:

案例3:传入a和b两个值,最终a和b都翻倍并返回(参数中包含INOUT)

CREATE PROCEDURE my_6(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END$

查询:

SET @m=5,@n=6$
CALL my_6(@m,@n)$
SELECT @m,@n$

注意:由于参数a、b即作为参数,也作为返回值,所以要先定义变量便于查询其返回值。

3、删除存储过程:

DROP PROCEDURE 存储过程名;

4、查看存储过程:

SHOW CREATE PROCEDURE 存储过程名;

五、函数

1、与存储过程的区别:函数有且仅有一个返回值,存储过程无要求。

2、创建语法:

CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END

注意:

①参数列表包含变量名和变量类型

②函数体中必须要包含return

③begin end的用法和存储过程相同

函数创建后再SQLyog中的位置:

3、调用语法:

SELECT 函数名(参数);

案例1:返回公司员工个数

#创建函数
DELIMITER $
CREATE FUNCTION counts() RETURNS INT
BEGIN
SET @num=0; #注意分号的使用
SELECT COUNT(*) INTO @num
FROM employees;
RETURN @num;
END$
#调用函数
SELECT counts();

注意:

①函数的创建语法与存储过程的创建语法不同,使用returns。

②MySQL8.0版本创建函数时报错,解决方法如下:点击访问

4、查看、删除语法与存储过程相似,将procedure修改为function即可。

六、流程控制结构

1、if结构(if函数)

if 条件1 then 语句1;
elseif 条件2 then 语句2;
....
else 语句n;
end if;

注意:if结构只能用在begin end中

2、循环结构:while、loop、repeat

①循环控制:

iterate类似于 continue,继续,结束本次循环,继续下一次 ​

leave 类似于 break,跳出,结束当前所在的循环

②语法:

#1.while
【标签:】while 循环条件 do
循环体;
end while【 标签】;
#2.loop
【标签:】loop
循环体;
end loop 【标签】;
#3.repeat
【标签:】repeat
循环体;
until 结束循环的条件
end repeat 【标签】;

案例:批量插入,根据次数插入到admin表中多条记录

DROP PROCEDURE pro_while1$
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=insertCount DO
INSERT INTO admin(username,`password`) VALUES(CONCAT('Rose',i),'666');
SET i=i+1;
END WHILE; END $

调用:

SELECT pro_while1(100)$

注意:因为没有返回值,所以使用存储过程实现。

(八)MySQL事务、视图、变量、存储过程、函数、流程控制结构的更多相关文章

  1. Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101

    视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...

  2. MySQL 索引 视图 触发器 存储过程 函数

    1.索引 索引相当于图书的目录,可以帮助用户快速的找到需要的内容. 数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万 ...

  3. mysql事务,视图,触发器,存储过程与备份

    .事务 通俗的说,事务指一组操作,要么都执行成功,要么都执行失败 思考: 我去银行给朋友汇款, 我卡上有1000元, 朋友卡上1000元, 我给朋友转账100元(无手续费), 如果,我的钱刚扣,而朋友 ...

  4. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  5. 第五章 MySQL事务,视图,索引,备份和恢复

    第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...

  6. MySQL——视图/触发器/事务/存储过程/函数/流程控制

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  7. day40 mycql 视图,触发器,存储过程,函数

    视图,触发器,存储过程,自定义函数 -- 回顾 1.mysql 约束 1.非空 not null 2. 主键约束 primary key 3. 唯一约束 unique 4. 外键约束 foreign ...

  8. MySQL 视图 触发器 事务 存储过程 函数 流程控制 索引与慢查询优化

    视图 1.什么是视图? 视图就是通过查询得到的一张虚拟表,然后保存下来,下次可直接使用 2.为什么要使用视图? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图? create view ...

  9. mysql 视图 触发器 事物 存储过程 函数 流程控制

    1.视图 *** 视图是有一条sql语句的查询结果构成的虚拟表 其不是物理存在的 使用方式与普通表相同 视图的作用1.简化sql语句的编写 2.限制可以查看的数据 可以使用权限来完成 权限某一个库 的 ...

  10. MySQL-5-TCL,视图,变量,存储过程和函数,流程控制

    TCL:Transaction Control Language事务控制语言 TCL 事务的特点 acid: 原子性(Atomicity),一致性(Consistency),隔离性(isolation ...

随机推荐

  1. Jenkins-gogs安装及使用

    很多同学可能第一次了解什么是ci-cd,什么是Jenkins,首先会介绍下cicd的概念及应用场景,之后再详细介绍下Jenkins的概念.安装及使用. 什么是CI-CD? 首先明确CI-CD是一种技术 ...

  2. Python实现批量处理文件的缩进和转码问题

    最近把很久前的C代码传到Github上的时候,发现全部上百个源文件的代码缩进都变成了8格,而且里面的中文都出现了乱码,所以决定写个程序来批量处理所有文件的格式.这段关于转码的代码可以适用于很多场合,比 ...

  3. 【python爬虫】scrapy入门8:发送POST请求

    scrapy基础知识之发送POST请求与使用 FormRequest.from_response() 方法模拟登陆 https://blog.csdn.net/qq_33472765/article/ ...

  4. 2.Redis安装和简单使用

    (1)安装Redis Redis目前只支持Linux系统,因为开发此软件的创始者认为,Redis是为后台数据服务的,所以认为该软件使用在纯净的服务环境下,而不是应用型操作系统下,而Linux作为服务器 ...

  5. Linux部分场景非常有用的命令集1_chattr&ldd&xargs&screen&ssh&磁盘&du

    这里不做详细说明或截图,仅作为记录和简单说明.注:可能只针对某一命令部分功能,不包含整个功能,若要查看全部请自行查阅文档或help 1.chattr 当某一文件或目录,不想被无意修改或删除(即使roo ...

  6. STM32串口DMA接收数据错位——暴力解决方法

    背景:两片STM32通过串口通信,为了减小CPU负担,采用DMA进行通信,发送端为STM32F103C8T6,接收端为STM32F407VET6.在调试的过程中发现,一直出现数据错位的问题,接收端尝试 ...

  7. 50个SQL语句(MySQL版) 问题十二

    --------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...

  8. Chisel3 - Tutorial - Adder4

    https://mp.weixin.qq.com/s/X5EStKor2DU0-vS_wIO-fg   四位加法器.通过FullAdder级联实现.   参考链接: https://github.co ...

  9. 数组API汇总

    数组API汇总   Javascript数组API: 1.将数组转化为字符串:2种: 1.var str=String(str); 将数组转化为字符串并分隔每个元素; var arr=[1,2,3]; ...

  10. Java实现 LeetCode 416 分割等和子集

    416. 分割等和子集 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: ...