补充:增删查改语句在数据库中基本通用,但这篇博客的内容基本是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. ol,li,ul,dl,dt,dd

    块级元素div尽量少用,其实和table一样,嵌套越少越好,它也是会影响速度的! ol 有序列表. <ol> <li>……</li> <li>……< ...

  2. Pyqt5_QmainWindow

    QmainWindow Toolbar() QMenuBar() StatusBar() ******************************************************* ...

  3. ubuntu 安装 swftoos

    一:下载依赖: freetype下载地址 : http://ftp.twaren.net/Unix/NonGNU/freetype/ jpegsrc:下载地址 http://www.ijg.org/f ...

  4. Cypress系列(2)- Cypress 框架的详细介绍

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Cypress 简介 基于 JavaSc ...

  5. C#网络编程入门之TCP

    目录: C#网络编程入门系列包括三篇文章: (一)C#网络编程入门之UDP (二)C#网络编程入门之TCP (三)C#网络编程入门之HTTP 一.概述 UDP和TCP是网络通讯常用的两个传输协议,C# ...

  6. Java IO(十五)FilterReader 和 FilterWriter、FilterReader 子类 PushBackReader

    Java IO(十五)FilterReader 和 FilterWriter.FilterReader 子类PushBackReader 一.介绍 FilterReader 和 FilterWrite ...

  7. SSL/TLS/WTLS

    转载来自http://blog.csdn.net/fw0124/article/details/8470940 一 前言 首先要澄清一下名字的混淆: 1 SSL(Secure Socket Layer ...

  8. 04 . Python入门之条件语句

    一. Python条件语句 Python条件语句是通过一条或多条语句执行结果(True或False)来决定执行的代码块. 可以通过下图简单了解语句的执行过程 Python程序语言指定任何非0和非空(n ...

  9. 重学 Java 设计模式:实战单例模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 5个创建型模式的最后一个 在设计模式中按照不同的处理方式共包含三大类:创建型模式.结 ...

  10. 50个SQL语句(MySQL版) 问题八

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