mysql事务顺序重排_MySQL事务处理及字符集和校对顺序

一、事务处理 事务处理:是一种机制,管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。用来维护数据库的完整性。

利用事务处理,可以保证一组操作不会中途停止,或作为整体执行或完全不执行(除非明确指示)。如果没有发生错误,整组语句写入数据库,如发生错误,则进行回退,以恢复数据库到某个已知且安全的状态。

事务处理的几个重要术语:

·事务:一组SQL语句;

·回退:撤销指定SQL语句的过程;

·提交:将未存储的SQL语句结果写入数据库表;

·保留点:事务处理中设置的临时占位符,可以对它发布回退(与回退整个事务处理不同);

管理事务处理的关键:将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应回退。

start transaction:标识事务的开始

1、使用rollback

rollback命令用来回退(撤销)MySQL语句,如下:

select * from ordertotals;

start transaction;

delete from ordertotals;

select * from ordertotals;

rollback;

select * from ordertotals;

解析:用rollback语句回退start transaction之后的所有语句,最后一条select语句显示该表不为空。

PS:

rollback只能在一个事务处理内使用(在执行一条start transaction命令之后)。

事务处理用来管理select、insert和update语句;不能回退select语句(没意义);不能回退create或drop操作(即使事务中使用这两条语句,如果执行回退,它们也不会被撤销)。

2、使用commit

一般MySQL语句都是直接针对数据库表执行和编写,也就是隐含提交,即提交(写或保存)操作是自动的;但在事务处理块中,提交不会隐含地进行。为进行明确的提交, 使用commit语句,如下:

start transaction; delete from orderitems where order_num = '20010'; delete from orders where order_num = '20010'; commit; 解析:从系统中完全删除订单20010,涉及更新两个数据库表,所以使用事务处理块来保证订单不被部分删除。commit语句仅在不出错时写出更改。如果第一条delete起作用,但第二条失败,则delete不会提交(被自动撤销)。

PS:当commit或rollback语句执行后,事务会自动关闭(将来的更改会隐含提交)。

3、使用保留点

复杂的事务处理可能需要部分提交或回退;

为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符,如果需要回退,可以回退到某个占位符,这些占位符称为保留点,为了创建占位符,可以使用savepoint语句,比如:savepoint deletel;

解析:每个保留点都取标识它的唯一名字,以便回退时MySQL知道要回退到何处。如为回退到本例给出的保留点,可以使用:rollback to deletel;

PS:保留点越多越好,这样可以更灵活的回退;保留点在事务处理完成后自动释放,或也可以用release savepoint明确的释放保留点。

4、更改默认提交行为

默认的MySQL行为是自动提交所有更改,即该SQL语句都是针对表执行的,而且立即生效;为指示MySQL不自动提交更改,可以使用:set autocommit = 0;

autocommit标志决定是否自动提交更改,不管有没有commit语句;即设置autocommit=0(假)指示MySQL不自动提交更改(直到autocommit被设置为真为止)。

PS:autocommit标志是针对每个连接,而不是服务器。

二、字符集和校对顺序 数据库表被用来存储和检索数据,不同的语言和字符集需要以不同的方式存储和检索。因此MySQL需要适应不同的字符集,适应不同排序和检索数据的方法。

常见的术语:

·字符集:字母和符号的组合

·编码:为某个字符集成员的内部表示

·校对:为规定字符如何比较的指令

1、查看字符集

查看所支持的字符集完整列表,可以使用:show character set;

这条语句显示所有可用的字符集以及每个字符集的描述和默认校对。

为查看所支持校对的完整列表,可使用:show collation;

此语句显示所有可用的校对,以及它们适用的字符集。

PS:通常系统管理在安装时定义一个默认的字符集合校对,也可在创建数据库时,指定默认的字符集和校对;为了确定所用字符集合校对,可使用以下语句:

show variables like 'character%';

show cariables like 'collation%';

PS:事实上,字符集很少是服务器范围(甚至数据库范围);不同表甚至不同列,都可能需要不同字符集,而且两者都可以在创建表时指定。

2、指定字符集和校对

为了给表指定字符集和校对,可使用如下语句:

create table mytable

( columnn1 int,

columnn2 varchar(10)

) default character set hebrew

collate hebrew_general_ci;

解析:创建一个包含两列的表,并且指定字符集和校对顺序。

MySQL默认使用的字符集和校对:

·如果指定character set和collate两者,则使用这些值;

·如果只指定character set,则使用此字符集及其默认的校对;

·如果既不指定character set,也不指定collate,则使用数据库默认。

PS:MySQL允许对每个列设置字符集和校对,例句如下:

create table mytable ( columnn1 int, columnn2 varchar(10), columnn3 varchar(10) character set latin1 collate latin1_general_ci ) default character set hebrew collate hebrew_general_ci;

校对在对用order by子句检索出来的数据排序时起重要的作用,如果你需要用与创建表时不同的校对顺序排序特定的select语句,可以在select语句自身中进行,比如:

select * from customers order by lastname,firstname collate latinl_general_cs;

select使用collate指定一个备用的校对顺序(为区分大小写校对),这样将影响到结果排序的次序。COLLATE还可以用于GROUP BY、HAVING、聚集 函数、别名等。

PS:如果绝对需要,串可以在字符集之间进行转换,使用cast()或 convert()函数。

![image](https://img-blog.csdnimg.cn/img_convert/dba2cb79d1c995eb0370236354df505f.png)

[**最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:909038429**](https://jq.qq.com/?_wv=1027&k=LTrB46U1)

/./*欢迎加入java交流Q君样:909038429一起吹水聊天

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql权重怎么配置_mysql如何按权重查询数据啊?

楼上的回答全都会错意了,题主意思是根据权重设定随机几率,例如 A 的权重为10,B 的权重为 5,这个时候随机出现 A 的几率要比出现 B 的几率高。你可以试试这个备选方案。就是先取出权重列表再去根据权重随机出来的那个权重值&#x…

【计蒜客 - 蓝桥训练】修建公路(贪心,或运算,dp)

题干: 蒜头国有 nn 座城市,编号分别为 0,1,2,3,\ldots,n-10,1,2,3,…,n−1。编号为 xx 和 yy 的两座城市之间如果要修高速公路,必须花费 x|yx∣y 个金币,其中|表示二进制按位或。 吝啬的国王想要花最少的价格修建高速公路&#…

【计蒜客 - 蓝桥训练】阶乘位数(数学,对数运算,求阶乘位数)

题干: 蒜头君对阶乘产生了兴趣,他列出了前 1010 个正整数的阶乘以及对应位数的表: nnn!n!位数111221361424251203672037504048403205936288061036288007 对于蒜头君来说,再往后就很难计算了。他试图寻找阶乘位数的规律&#xff…

mysql win10 优化设置_windows10如何优化?系统优化设置方法

windows10如何优化?,高系统效率,尽可能提高运行速度,是我们关心的问题。以下是电脑系统优化设置的4种方法,能够有效的提高系统的使用效率和优化系统管理,我们一起来看看吧!第一招:删…

【牛客 - 368D】动态连通块(并查集+bitset优化)

题干: 小T有n个点,每个点可能是黑色的,可能是白色的。 小T对这张图的定义了白连通块和黑连通块: 白连通块:图中一个点集V,若满足所有点都是白点,并且V中任意两点都可以只经过V中的点互相到达&a…

mysql 执行计划extra_mysql执行计划explain type和extra

mysql执行计划,搞定type和extra就能优化大部分sql了。type为主,extra为辅。type:system表只有一行,MyISAM引擎。const常量连接,表最多只有一行匹配,通用用于主键或者唯一索引比较时eq_ref每次与之前的表合并…

【计蒜客 - 蓝桥训练】欧拉函数(数学,数论,模板)

题干: 在数论中,对正整数 nn,欧拉函数 \varphi (n)φ(n) 是小于等于 nn 的正整数中与 nn 互质的数的数目。 例如 \varphi (12)4φ(12)4,因为 1,5,7,111,5,7,11 均和 1212 互质。 代码框中的代码是一种求欧拉函数的实现&#xf…

spark中读取json_【spark】文件读写和JSON数据解析

1.读文件通过 sc.textFile(“file://")方法来读取文件到rdd中。val lines sc.textFile("file://")//文件地址或者HDFS文件路径本地地址"file:///home/hadoop/spark-1.6.0-bin-hadoop2.6/examples/src/main/resources/people.json"HDFS文件地址"…

【牛客 - 370B】Rinne Loves Graph(分层图最短路 或 最短路dp)

题干: Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去。 众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些城镇之间用双向道路连接起来了&…

设python中有模块m、如果希望同时导入m中的所有成员_python-模块

先做几个练习题练习计算一个四乘四矩阵的所有元素的和,以及对角线之和#encodingutf-8a[[1,2,3,4],[2,5,2,3],[1,5,3,2],[5,3,2,5]]#encodingutf-8a[[1,2,3,4],[2,5,2,3],[1,5,3,2],[5,3,2,5]]total_sum0diagonal_sum0‘‘‘for i in a:print "i:",ifor j …

【牛客 - 370F】Rinne Loves Edges(树,统计dp)

题干: Rinne 最近了解了如何快速维护可支持插入边删除边的图,并且高效的回答一下奇妙的询问。 她现在拿到了一个 n 个节点 m 条边的无向连通图,每条边有一个边权 wiwi 现在她想玩一个游戏:选取一个 “重要点” S,然…

java 单例 饿汉式_Java-单例设计模式(懒汉与饿汉)

单例设计模式保证一个类在内存中只能有一个对象。思路:1)如果其他程序能够随意用 new 创建该类对象,那么就无法控制个数。因此,不让其他程序用 new 创建该类的对象。2)既然不让其他程序 new 该类对象,那么该类在自己内部就要创建一…

【HYSBZ - 2763 】飞行路线 (分层图最短路,最短路dp)

题干: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。Alice和…

java 命令行 编译 jar文件_用命令行编译java并生成可执行的jar包

如果想用java编写一个可视化小程序,碰巧手头没有IDE的话,可以用命令行来完成编译、打包等工作。拿自己编写的“java记事本”为例,介绍一下这个过程:1.编写源代码。编写源文件:NotePad.java并保存,例如&…

【牛客 - 369A】小D的剧场(线性dp)

题干: 链接:https://ac.nowcoder.com/acm/contest/369/A 来源:牛客网 题目描述 "我明白。" 作为这命运剧场永远的观众,小D一直注视着这片星光璀璨的舞台,舞台上,少女们的身姿演绎出了一幕幕…

java list遍历添加元素_java遍历List过程中添加和删除元素的问题

遍历元素最常见的三种方法://第三种遍历【利用迭代器】private static void loopList3(List strList) {Iterator itr strList.iterator();while (itr.hasNext()){String tmp itr.next();if("000".equals(tmp)){itr.remove();}else{System.out.println(t…

【蓝桥杯官网试题 - 算法提高 】求最大值 (dp,0-1背包)

题干: 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的aibi的和最大。并且要求你选定的数对的ai之和非负,bi之和非负。 输入格式 输入的第一行为n,数对的个数   以下n行每行两个整数 ai bi 输出格…

java button 圆角_UIButton具有渐变边框和圆角

我想要的是一个自定义UIButton,它有一个渐变边框(只是边框是渐变)和圆角 . 我几乎到了我想去的地方,但是角落有问题 . 这是我目前拥有的:这是我的代码:override func viewDidLoad() {super.viewDidLoad()let gradient CAGradient…

【牛客 - 368B】选点(dfs序,LIS 或 dfs序 + 树状数组 + 离散化,树状数组求LIS的方法)

题干: 有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi。现在要选出尽量多的点。 对于任意一棵子树,都要满足: 如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大; 如…

java xsd 解析 xml文件_Java针对XSD文件验证XML文件的最佳方法是什么?

小编典典Java运行时库支持验证。上次我检查的是幕后的Apache Xerces解析器。你可能应该使用javax.xml.validation.Validator。import javax.xml.XMLConstants;import javax.xml.transform.Source;import javax.xml.transform.stream.StreamSource;import javax.xml.validation.…