TCL:Transaction Control Language事务控制语言

TCL

  • 事务的特点 acid: 原子性(Atomicity),一致性(Consistency),隔离性(isolation),持久性(Durability)

事务的创建

  • 隐式事务:事务没有明显的开启和结束的标记,比如insert、update、delete、select语句
  • 显式事务:事务具有明显的开启和结束的标记,前提:必须先设置 自动提交功能 为禁用

    步骤

    步骤1:开启事务

    set autocommit=0

    start transaction;可选的

    步骤2:编写事务中的sq1语句(select insert update delete

    步骤3:结束事务

    commit;提交事务

    rollback;回滚事务

查看隔离级别

SELECT @@tx_isolation

设置隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别

视图

  • 它是一个虚拟表,使用和普通表一样

创建视图

语法: create view 视图名 as 查询语句;

  1. # 创建视图
  2. # 查询姓名中包含a字符的员工名、部门名和工种信息
  3. # 1.把查询信息封装起来
  4. CREATE VIEW v1
  5. AS
  6. SELECT `last_name`, `department_name`, `job_title`
  7. FROM employees e
  8. INNER JOIN departments d ON e.`department_id` = d.`department_id`
  9. INNER JOIN jobs jo ON e.`job_id` = jo.`job_id`
  10. # 2. 用视图查询
  11. SELECT * FROM v1 WHERE last_name LIKE '%a%';

视图的修改

  • 方式一:create or replace view 视图名 as 查询语句
  • 方式二:alter view 视图名 as 查询语句;
  1. # 视图的修改
  2. # 查询所有员工信息
  3. # 方式一:
  4. CREATE OR REPLACE VIEW v2
  5. AS
  6. SELECT * FROM employees
  7. SELECT v2.last_name FROM v2 # 查询所有姓名
  8. # 方式二:
  9. ALTER VIEW v2
  10. AS
  11. SELECT last_name, first_name FROM employees
  12. SELECT * FROM v2 #查询这个视图

视图的删除

  • 语法:drop view 视图名,视图名,…;
  1. # 删除视图v1和v2
  2. DROP VIEW v1,v2

查看视图结构

DESC v1

变量

  • 分类:系统变量(全局/会话变量),自定义变量(用户/局部变量)

系统变量

全局变量

  1. # 系统变量
  2. # 1.查看系统所有变量
  3. # SHOW global|session VARIABLES;
  4. SHOW VARIABLES
  5. # 2. 查看系统中满足条件的部分变量 如:查看字符集
  6. # SHOW global|【session】variables LIKE '%chars'
  7. SHOW VARIABLES LIKE '%char%'
  8. # 3、查看指定的某个系统变量的值
  9. # select @@global|【session】.系统变量名;
  10. SELECT @@global.autocommit
  11. SELECT @@global.tx_isolation
  12. # 4、为某个系统变量赋值
  13. #方式一:
  14. # set global|【sessifn】系统变量名=值;
  15. #方式二:
  16. # set @@global|【session】.系统变量名=值;
  17. SET @@global.autocommit = 0; # 更改是否自动提交

会话变量

  1. # 会话变量
  2. # 1.查看所有会话变量
  3. SHOW SESSION VARIABLES
  4. # 2. 查看部门会话变量
  5. SHOW SESSION VARIABLES LIKE '%char%'
  6. # 3. 查看指定的某个会话变量
  7. SELECT @@session.tx_isolation
  8. # 4. 设置会话变量值
  9. SET @@session.autocommit = 1

自定义变量

用户变量

  1. # 用户变量
  2. # 1. 声明并初始化
  3. /*
  4. SET 用户变量名=值;
  5. 或 SET 用户变量名:=值;
  6. 或 SELECT 用户变量名:=值;
  7. */
  8. # 2. 赋值
  9. /*
  10. 语法一:select into
  11. 语法二:如上初始化
  12. */
  13. SET @name = 'j';
  14. SELECT @name
  15. SET @temp = '';
  16. SELECT COUNT(*) INTO @temp FROM employees;
  17. SELECT @temp

局部变量

  • 作用域:仅仅在定义它的begin end中有效
  • 位置:只能在begin and开头
  1. # 局部变量
  2. # 1. 声明
  3. /*
  4. 语法一:declare 变量名 类型
  5. 语法二:declare 变量名 类型 default 值
  6. */
  7. # 2. 赋值 和用户变量赋值一样;set/select
  8. # 1.用户变量
  9. SET @a = 1;
  10. SET @b = 2;
  11. SET @c = @a + @b;
  12. SELECT @c
  13. # 2.局部变量
  14. DECLARE a INT DEFAULT 1; # 报错
  15. DECLARE b INT DEFAULT 2; # 报错
  16. DECLARE c INT ; # 报错
  17. SET c = a + b; # 报错

存储过程

创建和调用

  • 创建语法
  1. CREATE PROCEDURE 存储过程名(参数列表)
  2. BEGIN
  3. 具体SQL语句
  4. LEND
  5. /*
  6. 注意:
  7. 1、参数列表包含三部分
  8. 参数模式 参数名 参数类型
  9. 举例: IN stuname VARCHAR(20)
  10. 参数模式:
  11. IN: 调用该存储过程需要传入参数
  12. OUT: 可以返回该参数值
  13. INOUT: 既可以做输入 也可以做输出(输出的是参数值)
  14. 2、如果存储过程体仅仅只有一句话,BEGINEND可以省略
  15. 3、存储过程体中的每条sQL语句的结尾要求必须加分号。
  16. */
  • 调用语法:CALL 存储过程名 (实参列表);

空参列表

MySQL中操作

  • 1.编写存储过程语句
  1. # 空参列表
  2. # 插入到admin表中3条记录
  3. DELIMITER $ #设置结束符
  4. CREATE PROCEDURE myp1()
  5. BEGIN
  6. INSERT INTO admin(`username`, `password`) VALUES
  7. ('aaa','aaa'),
  8. ('bbb','bbb'),
  9. ('ccc','ccc'); # 每一条语句都以分号结束
  10. END $ # 结束标记
  • 2.window下,以管理员启动dos窗口,输入mysql -uroot -p密码进入MySQL操作下,粘贴存储过程语句,回车
  • 3.调用存储过程 call myp1() $; 即可操作成功

带in模式

  1. # 带in类型
  2. # 创建存储过程实现根据女神名,查询对应的男神信息
  3. DELIMITER $
  4. CREATE PROCEDURE myp2(IN girlName VARCHAR(50))
  5. BEGIN
  6. SELECT bo.* FROM boys bo
  7. INNER JOIN beauty b ON bo.`id` = b.`boyfriend_id`
  8. WHERE b.`name` = girlName;
  9. END $
  10. CALL myp2('唐艺昕1') # sqlyog执行语法

在命令行窗口执行时,唐艺昕1是中文,需要先设置字符集 然后再调用语句.

带out模式

  1. # 带out存储过程
  2. # 根据女生名,返回对应的男朋友
  3. DELIMITER $
  4. CREATE PROCEDURE myp3(IN girlName VARCHAR(20), OUT boyName VARCHAR(20))
  5. BEGIN
  6. SELECT bo.`boyName` INTO boyName
  7. FROM beauty b
  8. INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
  9. WHERE b.`name` = girlName;
  10. END $
  11. # 调用(命令行窗口)
  12. SET @bName=''$;
  13. CALL myp3('热巴',@bName)$;
  14. SELECT @bName$;

带inout的存储过程

  1. # 传入a和b两个值,最终a和b都翻倍并返回
  2. DELIMITER $
  3. CREATE PROCEDURE myp4(INOUT a INT, INOUT b INT)
  4. BEGIN
  5. SET a = a * 2;
  6. SET b = b * 2;
  7. END $
  8. # 调用(命令行方式)
  9. SET @a=2;$
  10. SET @b=3;$
  11. CALL myp4(@a, @b);$
  12. SELECT @a,@b;$

存储过程的删除

  1. DROP PROCEDURE myp1

存储过程的查看

  1. SHOW CREATE PROCEDURE myp2;

函数

  • 函数和存储过程区别:

    ①存储过程:可以有0个返回,也可以有多个返回

    ②函数:有且只有1个返回
  • 语法:
  1. CREATE FUNCTTON 函数名(参数列表)RETURNS 返回类型I
  2. BEGIN
  3. 函数体
  4. END
  5. /*
  6. 注意: 参数列表包含两部分:参数名 参数类型
  7. 肯定会有return单语句,如果没有会报错
  8. 使用delimiter语句设置结束标记
  9. */
  10. # 调用:SELECT FUNCTION(参数列表)

例子

  1. # 1.无参有返回
  2. # 返回公司的员工个数
  3. DELIMITER $
  4. CREATE FUNCTION f1() RETURNS INT
  5. BEGIN
  6. DECLARE c INT ;
  7. SELECT COUNT(*) INTO c # 赋值
  8. FROM `employees`;
  9. RETURN c;
  10. END $
  11. #调用
  12. SELECT f1();
  13. # 2.有参有返回
  14. # 根据员工名,返回它的工资
  15. DELIMITER $
  16. CREATE FUNCTION f2(eName VARCHAR(20)) RETURNS DOUBLE
  17. BEGIN
  18. DECLARE result DOUBLE;
  19. SELECT salary INTO result FROM employees WHERE `last_name` = eName;
  20. RETURN result;
  21. END $
  22. #调用
  23. SELECT f2('Kochhar');$

查看/删除函数

  1. # 查看函数
  2. SHOW CREATE FUNCTION f2
  3. # 删除函数
  4. DROP FUNCTION f1

流程控制

case再练手

语法

  1. /*
  2. 情况1:类似于java中的switch语句,一般用于实现等值判断
  3. CASE 变量|表达式|字段
  4. WHEN 要判断的值 THEN 返回的值1或语句1;
  5. WHEN 要判断的值 THEN 返回的值2或语句2;
  6. ELSE 要返回的值n或语句n;
  7. END CASE;
  8. 情况2:类似于java中的多重IF语句,一般用于实现区间判断语法:
  9. CASE
  10. WHEN 要判断的条件1 THEN返回的值1或语句1;
  11. WHEN 要判断的条件2 THEN返回的值2或语句2;
  12. ELSE 要返回的值n或语句n;
  13. END CASE;
  14. */
  1. # case初步练手看DQL
  2. # case
  3. # 创建存储过程,根据传入的成绩,来显示等级
  4. DELIMITER $
  5. CREATE PROCEDURE myp1(IN grade INT)
  6. BEGIN
  7. CASE
  8. WHEN grade BETWEEN 90 AND 100 THEN SELECT 'a';
  9. WHEN grade BETWEEN 80 AND 90 THEN SELECT 'b';
  10. ELSE SELECT 'c';
  11. END CASE;
  12. END $
  13. #调用
  14. CALL myp1(90);$

if结构

语法:

  1. /*
  2. if 条件1 then语句1;
  3. elseif 条件2 then 语句2;
  4. ...
  5. else 语句n;
  6. end if;
  7. 应用在begin end中
  8. */

循环结构

概念

  1. 分类:
  2. whilelooprepeat
  3. 循环控制:
  4. iterate类似于continue,继续,结束本次循环,继续下一次
  5. leave 类似于break,跳出,结束当前所在的循环
  6. # 以下【】可有可无
  7. /*
  8. # while 语法
  9. 【标签:(有标签才能搭配循环控制语句)】while 循环条件 do
  10. 循环体;
  11. end while【标签】;
  12. */
  13. /*
  14. # loop语法:
  15. 【标签:】1oop
  16. 循环体;
  17. end 1oop【标签】
  18. */
  19. /*
  20. # repeat 语法:
  21. 【标签:】 repeat
  22. 循环体;
  23. until结束循环的条件
  24. end repeat【标签】
  25. */

举例

  1. # 没有添加循环控制语句
  2. # 批量插入,根据次数插入到admin表中多条记录
  3. DELIMITER $
  4. CREATE PROCEDURE pro_while(IN num INT)
  5. BEGIN
  6. DECLARE i INT DEFAULT 1;
  7. WHILE i <= num DO
  8. INSERT INTO admin(`username`, `password`) VALUES
  9. (CONCAT('admin',i), 'aaa');
  10. SET i = i + 1;
  11. END WHILE;
  12. END $
  13. # 调用
  14. SET @a = 10;$
  15. CALL pro_while(@a);$
  16. # 添加leave语句
  17. # 批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
  18. TRUNCATE TABLE admin
  19. DELIMITER $
  20. CREATE PROCEDURE pro_leave(IN num INT)
  21. BEGIN
  22. DECLARE i INT DEFAULT 1;
  23. a:WHILE i < num DO
  24. IF i > 20
  25. THEN LEAVE a;
  26. END IF;
  27. INSERT INTO admin(`username`, `password`) VALUES
  28. (CONCAT('admin',i), 123456);
  29. SET i = i + 1;
  30. END WHILE;
  31. END $
  32. #调用
  33. SET @a = 100;$
  34. CALL pro_leave(@a);$
  35. #查看
  36. SELECT * FROM admin;$
  37. # 添加iterate语句
  38. # 批量插入,根据次数插入到admin表中多条记录,仅仅插入偶数
  39. TRUNCATE TABLE admin
  40. DELIMITER $
  41. CREATE PROCEDURE pro_iterate(IN num INT)
  42. BEGIN
  43. DECLARE i INT DEFAULT 0;
  44. a:WHILE i < num DO
  45. SET i = i + 1;
  46. IF (i % 2) != 0
  47. THEN ITERATE a;
  48. END IF;
  49. INSERT INTO admin(`username`, `password`) VALUES
  50. (CONCAT('admin',i), 123456);
  51. END WHILE ;
  52. END $
  53. #调用
  54. SET @a = 100;$
  55. CALL pro_iterate(@a);$
  56. #查看
  57. SELECT * FROM admin;$

MySQL-5-TCL,视图,变量,存储过程和函数,流程控制的更多相关文章

  1. MySQL之视图、触发器、事务、存储过程、函数 流程控制

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  2. 在PowerDesigner中设计物理模型3——视图、存储过程和函数

    原文:在PowerDesigner中设计物理模型3--视图.存储过程和函数 视图 在SQL Server中视图定义了一个SQL查询,一个查询中可以查询一个表也可以查询多个表,在PD中定义视图与在SQL ...

  3. 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

  4. Linux基础-shell脚本知识整理和脚本编写----------变量、运算符、流程控制、函数、计划任务(发送邮件)

    I:知识整理:变量.运算符.流程控制.函数.计划任务 变量 系统变量:set:显示所有变量                env:环境变量 常用系统变量: path pwd lang home his ...

  5. 自动化运维工具之Puppet变量、正则表达式、流程控制、类和模板

    前文我们了解了puppet的file.exec.cron.notify这四种核心资源类型的使用以及资源见定义通知/订阅关系,回顾请参考https://www.cnblogs.com/qiuhom-18 ...

  6. MySQL 第十天(视图、存储过程、函数、触发器)

    MySql高级-视图.函数.存储过程.触发器 目录 一.视图    1 1.视图的定义    1 2.视图的作用    1 (1)可以简化查询.    1 (2)可以进行权限控制,    3 3.查询 ...

  7. MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能

    一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...

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

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

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

       视图: 也就是一个虚拟表(不是真实存在的),它的本质就是根据SQL语句获取动态的数据集,并为其命名.用户使用时只需要使用命名的视图即可获取结果集,并可以当做表来使用.它的作用就是方便查询操作,减 ...

随机推荐

  1. eclipse 下 SpringBoot 工程使用Maven打包

    eclipse 下 SpringBoot 工程使用Maven打包 1. pom.xml 添加打包配置 点击查看代码 <!-- 打包使用 --> <build> <plug ...

  2. zabbix监控SSL证书有效期

    想给公司网站加上证书的监控,发现agent无此监控项.科普之后发现需要自行添加脚本以及一些操作. 环境信息 系统版本: Ubuntu20.04 zabbix server版本:5.4 (这个自定义貌似 ...

  3. Nuxt 的介绍与安装

    Nuxt.js(一.介绍与安装) 1.为什么使用Nuxt 渐进式Vue.js框架给前后端分离带来无限的乐趣,越来越多的程序员选择Vue.在我们使用Vue框架的过程中不免会出现以下的一些问题: 如何更好 ...

  4. 不借助 Javascript,利用 SVG 快速构建马赛克效果

    之前在公众号转发了好友 Vajoy 的一篇文章 -- 巧用 CSS 把图片马赛克风格化. 核心是利用了 CSS 中一个很有意思的属性 -- image-rendering,它可以用于设置图像缩放算法. ...

  5. Java语言学习day38--8月13日

    ###11哈希表的数据结构 A:哈希表的数据结构:(参见图解) 加载因子:表中填入的记录数/哈希表的长度 例如: 加载因子是0.75 代表: 数组中的16个位置,其中存入16*0.75=12个元素 如 ...

  6. Sliding Window - 题解【单调队列】

    题面: An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving fr ...

  7. 使用 bitnami/postgresql-repmgr 镜像快速设置 PostgreSQL HA

    什么是 PostgreSQL HA? 此 PostgreSQL 集群解决方案包括 PostgreSQL 复制管理器(replication manager),这是一种用于管理 PostgreSQL 集 ...

  8. [游记] pkusc 2021 游记

    流水账 Day-4 写了ICPC的一道DP,有点细节,虽然写得有点难受,但挺好玩 Day-3 写了PKUSC2018最水的一题 是随机开的题 Day-2 可以去pkusc了,从今天中午开始停课 刚吃完 ...

  9. ghostnet论文解析:ghost

    创建日期: 2020-03-02 17:02:54 简介: GhostNet是2020CVPR录用的一篇对卷积操作进行改进的论文.文章的核心内容是Ghost模块(Ghost Module),可以用来替 ...

  10. 简单易懂的 Go 泛型使用和实现原理介绍

    原文:A gentle introduction to generics in Go by Dominik Braun 万俊峰Kevin:我看了觉得文章非常简单易懂,就征求了作者同意,翻译出来给大家分 ...