《MYSQL数据库》TCL语言和DCL语言

一、TCL语言的操作语法

有时候我们的一个需求(一个任务),可能会涉及到多个DML(增删改)操作。那么这一系列操作, 我们要看成一个整体,不可切割。如在一个员工系统中,某员工A的数据可能会存在多个表中,如基本信息表,业务信息表,邮箱信息表等。当我们想删除此人的所有信息时,除了删除这个人的基本信息外,还应该删除与此人有关的其他所有信息,如邮箱,地址等等。这样的操作会涉及到多个DML语句。那么从开始执行到真正结束,就会构成一个事务(Transaction)。对于事务,我们要保证事务的完整性,不能分割。事务要么成功, 要么撤回(回到执行前),不能执行一部分就终止。

注意,只有DML操作时,才会涉及到事务。而mysql数据库在执行完每一个DML操作时,会默认commit; 可以使用start transaction来取消自动提交

commit:用于提交,表示事务成功结束。用于确认数据的更改,持久化。
rollback:用于回滚,回退到事务开始前。取消所有的DML操作。
savepoint: 设置事务的保存点,可以回退到指定的保存点。

事务有四个基本特征,简称ACID.

(1) 原子性(Atomicity): 即事务要么成功,要么撤回,不可切割。
(2) 一致性(Consistency):事务开始前和结束后,要保证数据的一致性。如转账案例,转账前账号A和账号B的钱的总数为10000。转账后账号A和账号B的钱的总数应该还是10000;
(3) 隔离性(Isolation):当涉及到多用户操作同一张表时,数据库为会每一个用户开启一个事务。那么当其中一个事务正在进行时,其他事务应该处于等待状态。保证事务之间不会受影响。
(4) 持久性(Durability): 当一个事务被提交后,我们要保证数据库里的数据是永久改变的。即使数据库崩溃了,我们也要保证事务的完整性。

关于事务的隔离性,尤为重要。当多用户(多线程)同时操作同一张表时,如果没有隔离机制,可能会发生以下问题:

脏读:事务A读取了事务B刚刚更新的数据,但是事务B回滚了,这样就导致事务A读取的为脏数据,我们称之为脏读。
如公司某财务人员更新公司入账报表时,在DML语句中的数字后少添加了一个0,但是未提交,然后吃饭,吃饭回来,发现错误,然后更正后做了提交。而在吃饭期间,老板要求秘书查看一下报表,秘书看到的是少个0的数据。这就是脏读。

 

不可重复读:事务A读取同一条记录两次,但是在两次之间事务B对该条记录进行了修改并提交,导致事务A两次读取的数据不一致。
它和脏读的区别是,脏读是事务A读取了另一个事务B未提交的脏数据,而不可重复读则是事务A读取了事务B提交的数据。
多数情况下,不可重复读并不是问题,因为我们多次查询某个数据时,当然要以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,比如,老板让B和C分别核对事务A操作的数据,结果可能不同,老板是怀疑B呢,还是C呢?

 

幻读:事务A在修改全表的数据,比如将字段age全部修改为0岁,在未提交时,事务B向表中插入或删除数据,如插入一条age为25岁的数据。这样导致事务A读取的数据与需要修改的数据不一致,就和幻觉一样。
幻读和不可重复读的相同点:都是针对于另外一个已经提交的事务而言。不同点:不可重复读是针对于同一条记录来说的(delete或update 同一条记录),而幻读是针对于一批数据来说的(insert)

 

事务的隔离机制有以下四种:

1、未提交读(read uncommitted):就是不做隔离控制,可以读到“脏数据”,可能发生不可重复读,也可能出现幻读。
2、提交读(read committed):提交读就是不允许读取事务没有提交的数据。显然这种级别可以避免了脏读问题。但是可能发生不可重复读,幻读。这个隔离级别是大多数数据库(除了mysql)的默认隔离级别。
3、可重复读(repeatable read):为了避免提交读级别不可重复读的问题,在事务中对符合条件的记录上"排他锁",这样其他事务不能对该事务操作的数据进行修改,可避免不可重复读的问题产生。由于只对操作数据进行上锁的操作,所以当其他事务插入或删除数据时,会出现幻读的问题,此种隔离级别为Mysql默认的隔离级别。
4、序列化(Serializable),在事务中对表上锁,这样在事务结束前,其他事务都不能够对表数据进行操作(包括新增,删除和修改),这样避免了脏读,不可重复读和幻读,是最安全的隔离级别。但是由于该操作是堵塞的,因此会严重影响性能。

相关语法格式如下:

查看数据库的当前隔离机制: select @@tx_isolation;
修改数据库的隔离机制:set transaction isolation level 机制名称 或者是 set tx_isolation='机制名称';
如:set transaction isolation level read uncommitted 或者 set tx_isolation=‘read-uncommitted’;

二、DCL语言的操作语法

(1)创建用户:create user username@ip identified by newPassword;

(2)修改密码:alter user username@ip identified by newPassword;

(3)显示用户的权限:show grants for username@ip;

(4)授权语句:grant 权限1,权限2,...... on databaseName.* to username@ip;

DDL权限名称: create、alter、drop、truncate 、create view 等等

DML权限名称: insert、delete、update

DQL权限名称: select

(5)撤销权限:revoke 权限1,权限2,..... on databaseName.* from username@ip;

(6)删除用户:drop user username;

(7)权限生效语句:flush privileges;

热门文章

暂无图片
编程学习 ·

RFID标签与我们的生活息息相关

在我们的生活中,很多领域都在使用RFID标签,下面,小编就来给大家介绍一下。1、ETC智能收费把RFID标签安装在车子汽车挡风玻璃上,在高速收费站ETC行车道上的频射无线天线中间的专用型短程通信,利用软件连接网络技术性与金融机构开展后台管理清算解决,进而做到车子根据路桥区…
暂无图片
编程学习 ·

如何更好的使用大数据

在互联网时代,依靠大数据是未来的发展趋势。大数据分析现在非常流行,但是我们需要知道的是,大数据的价值体现在有效而正确的分析中。只有通过正确有效的分析工具和分析方法来解释现有的大数据,大数据才能为我们带来有价值的结果。今天,中琛魔方将教您如何有效运用大数据。…
暂无图片
编程学习 ·

Java教程,Java入门教程,9天快速掌握java基础

Java语言于1995年诞生至今,已经有25年的发展历史,并长期位居编程语言界榜首。行业需求大,薪资待遇高,这些都是Java的优势,那对于初学者来说,怎么样才能更好的入门Java呢?传智播客为此准备了精品视频课程,用9天时间带你快速掌握Java基础。(PS:文末附有课程)本课程将会…
暂无图片
编程学习 ·

setuptools制作whl包实战讲解(一)

什么是 whl .whl格式的文件本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装。我们可以使用我们非常熟悉的pip install 来安装whl包。 如: pip install mask_detect_v1.0.whl如何制作whl包…
暂无图片
编程学习 ·

FPGA之fifo设计

FPGA之手撕fifo(含设计代码和仿真)本文回答以下几个问题:1:fifo的读空和写满信号如何给出2:fifo的写控制模块设计3:fifo的读控制模块设计4:双口RAM使用5:顶层文件6:仿真文件编写7:modelsim的RTL仿真1:上一篇文章(FPGA之FIFO IP核详细教程)已经简单说了一下读写指针…
暂无图片
编程学习 ·

maven 有时候parent项目版本没更新的版本问题

对于parent工程,一般规定了版本,并且包含了子模块。如果首次编译整个项目,可能导致编译不成功,因为子模块需要父工程版本号。父工程想连同子模块一起编译,所以首次编译的时候,注释掉parent工程的子模块。先编译版本,成功后放开子模块。就可以了。如果parent的版本发生变…
暂无图片
编程学习 ·

【备忘】PHP读取apk安装包信息

PHP读取apk安装包信息可以获取应用名称、包名、版本信息等[已测试通过]感谢前辈贡献的代码!!直接上代码->biu~以下是底层封装:<?phpnamespace libraries\apk;use think\Exception;class ApkParser{//----------------------// 公共函数,供外部调用//---------------…
暂无图片
编程学习 ·

Leetcode—437路径总和II

题目描述给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。…
暂无图片
编程学习 ·

imx6 DDR Stress Test Tool

DDR Stress Test Tool 提供了两种用途。首先,它可以用来对校准DDR3,以便于MMDC PHY delay settings和PCB配对 来达到最佳的DRAM新能。整个过程是全自动的,因此客户可以在较短的时间内让他们的DDR3工作起来。另外,该工具可以运行内存压力测试,用来验证DDR3的功能和可靠性。…
暂无图片
编程学习 ·

setuptools Command Reference

https://setuptools.readthedocs.io/en/latest/setuptools.html#command-reference alias - Define shortcuts for commonly used commands bdist_egg - Create a Python Egg for the project develop - Deploy the project source in “Development Mode” egg_info - Create …
暂无图片
编程学习 ·

7月1日学习记录

额~ 今日份的记录,今天投了两家公司,春招都过去3,4个月了,再怂得不敢投简历不敢面试,就有点说不过去了…现在对我来说最最重要的是要学会敢于面对失败。 编程题:整数中1出现的次数 求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 思考: 先把每个数字转换…
暂无图片
编程学习 ·

react中使用scss全局变量做留海屏幕适配

最近我的react工程需要做留海屏幕适配,用了公司的框架mtl(支持友空间),我们都知道现在大多数做留海适配都是在顶部设置25px的高度,那为什么做适配会用到scss全局变量呢? 答案就是方便!配置了全局变量后我们可以在想要的任何地方使用,设置使用css的calc动态计算一些宽度…
暂无图片
编程学习 ·

【DevOps】云原生(Cloud Native)

云原生 Pivotal 是云原生应用的提出者,并推出了Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者。 云原生的概念历经了许多个版本的迭代,到了2015年Google主导成立了云原生计算基金会(CNCF),对云原生的定义为: 云…
暂无图片
编程学习 ·

LeetCode 535. TinyURL 的加密与解密

目录结构1.题目2.题解1.题目TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计…
暂无图片
编程学习 ·

这个GitHub项目助你备战秋招,历时1个月完成此份Java后端面试Note,每个专题都很细(含本地版)

2020 年秋季招聘黄金季还有2个月将至,如何拿到心仪的 Offer,进入梦寐以求的大厂,实现自己的职业理想,达到程序员的小康水平。9月是招聘黄金季,但此时,聪明的你现在就要开始物色和准备,物色目标、准备简历、找渠道、夯实技术、掌握面试套路。 于是利用空余时间整理了一份…
暂无图片
编程学习 ·

Transformer 笔记总结

transformer这一概念来自于原文attention is all you need 在机器翻译中,输入是一个句子,输出是另一种语言的句子,如下图所示:即由编码组件、解码组件以及连接层构成,如下图所示:其中编码器由6个编码器单元构成,解码器由6个解码器单元构成,如下图所示:其中,编码器单元…
暂无图片
编程学习 ·

微信小程序使用iconfont彩色图标,真机上不显示

原代码cover-view中使用iconfont彩色图标:图标在模拟器上正常显示,但是在真机上不显示 <cover-view class="t-icon t-icon-ABC"></cover-view>解决方案如下:将cover-view标签改为view标签即可,其他部分不变 <view class="t-icon t-icon-ABC&…