MySQL事务,锁,字符集
MySQL事务和字符集
不善表演
都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,都是转载的,
展开
-
15、字符集的选择
由于数据库中存储的数据大部分都是各种文字,所以字符集对数据库的存储、处理性能,以及日后系统的移植、推广都会有影响。对数据库来说,字符集非常重要。不论是在 MySQL 数据库还是其它数据库,都存在字符集的选择问题。如果在创建数据库时没有正确选择字符集,在后期就可能需要更换字符集,而更换字符集是代价比较高的操作,也存在一定的风险。所以推荐在应用开始阶段,就按照实际需求,正确的选择合适的字符集,避免后期不必要的调整。我们了解到目前 MySQL 5.7 支持几十种字符集,包括 UCS-2、UTF-16、UTF-原创 2020-10-20 09:51:20 · 372 阅读 · 0 评论 -
14、修改字符集步骤详解
在实际应用中,如果一开始没有正确的设置字符集,在运行一段时间以后,才发现当前字符集不能满足要求,需要进行调整,但又不想丢弃这段时间的数据,这个时候就需要修改字符集。ALTER DATABASE 或 ALTER TABLE 命令对已经存在的数据没有作用,只对新创建的表或记录生效。如果想修改已存在数据的字符集,需要先将数据导出,经过适当的调整后,再重新导入。例 1以下模拟的是将 gb2312 字符集的数据库修改成 gbk 字符集的数据库的过程。1)创建 testset 数据库,设置其字符集为 gb231原创 2020-10-19 21:51:46 · 2388 阅读 · 1 评论 -
13、设置默认字符集和校对规则
MySQL 服务器可以支持多种字符集,在同一台服务器、同一个数据库甚至同一个表的不同字段中,都可以使用不同的字符集。Oracle 等其它数据库管理系统都只能使用相同的字符集,相比之下,MySQL 明显存在更大的灵活性。MySQL 的字符集和校对规则有 4 个级别的默认设置,即服务器级、数据库级、表级、字段级。它们分别在不同的地方设置,作用也不相同。服务器字符集和校对规则修改服务器默认字符集和校对规则的方法如下。1)可以在 my.ini 配置文件中设置服务器字符集和校对规则,添加内容如下:原创 2020-10-19 21:51:37 · 3257 阅读 · 0 评论 -
12、查看字符集和校对规则
本节主要介绍查看字符集和校对规则的几种方法。在 MySQL 中,查看可用字符集的命令和执行过程如下:mysql> SHOW CHARACTER set;+----------+---------------------------------+---------------------+--------+| Charset | Description | Default collation | Maxlen |+----------+------原创 2020-10-19 21:51:21 · 964 阅读 · 1 评论 -
11、MySQL字符集和校对规则详解
在讲解字符集和校对规则之前,我们先来简单了解一下字符、字符集和字符编码。字符(Character)是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。字符集(Character set)定义了字符和二进制的对应关系,为字符分配了唯一的编号。常见的字符集有 ASCII、GBK、IOS-8859-1 等。字符编码(Characte原创 2020-10-19 21:51:14 · 650 阅读 · 0 评论 -
10、MySQL锁等待,死锁,死锁检测
使用数据库时,有时会出现死锁。对于实际应用来说,就是出现系统卡顿。死锁是指两个或两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象。就是所谓的锁资源请求产生了回路现象,即死循环,此时称系统处于死锁状态或系统产生了死锁。常见的报错信息为“Deadlock found when trying to get lock...”。上图中,很明显是右侧的四辆汽车造成了死锁。死锁发生以后,只有部分或完全回滚其中一个事务,才能打破死锁。多数情况下只需要重新执行因死锁回滚的事务即可。下面我们通过一个实例原创 2020-10-19 21:51:32 · 691 阅读 · 0 评论 -
9、 InnoDB行锁
在 MySQL 中,InnoDB 行锁通过给索引上的索引项加锁来实现,如果没有索引,InnoDB 将通过隐藏的聚簇索引来对记录加锁。InnoDB 支持 3 种行锁定方式:行锁(Record Lock):直接对索引项加锁。间隙锁(Gap Lock):锁加在索引项之间的间隙,也可以是第一条记录前的“间隙”或最后一条记录后的“间隙”。Next-Key Lock:行锁与间隙锁组合起来用就叫做 Next-Key Lock。 前两种的组合,对记录及其前面的间隙加锁。默认情况下,InnoDB 工作在可重复读原创 2020-10-19 21:51:04 · 179 阅读 · 0 评论 -
8、MySQL表锁、行锁和页锁
MySQL 按锁的粒度可以细分为行级锁、页级锁和表级锁。我们可以将锁粒度理解成锁范围。1)表级锁(table lock)表级锁为表级别的锁定,会锁定整张表,可以很好的避免死锁,是 MySQL 中最大颗粒度的锁定机制。一个用户在对表进行写操作(插入、删除、更新等)时,需要先获得写锁,这会阻塞其它用户对该表的所有读写操作。没有写锁时,其它读取的用户才能获得读锁,读锁之间是不相互阻塞的。表级锁最大的特点就是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。当然,锁定颗粒度大带来最大原创 2020-10-19 21:50:55 · 337 阅读 · 0 评论 -
7、 MySQL锁机制:数据库核心技术之一
为了保证数据并发访问时的一致性和有效性,任何一个数据库都存在锁机制。锁机制的优劣直接影响到数据库的并发处理能力和系统性能,所以锁机制也就成为了各种数据库的核心技术之一。锁机制是为了解决数据库的并发控制问题而产生的。如在同一时刻,客户端对同一个表做更新或查询操作,为了保证数据的一致性,必须对并发操作进行控制。同时,锁机制也为实现 MySQL 的各个隔离级别提供了保证。可以将锁机制理解为使各种资源在被并发访问时变得有序所设计的一种规则。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,原创 2020-10-19 21:50:48 · 194 阅读 · 0 评论 -
6、MySQL查看和修改事务隔离级别
本节主要介绍查看和修改事务隔离级别的几种方法。查看事务隔离级别在 MySQL 中,可以通过show variables like '%tx_isolation%'或select @@tx_isolation;语句来查看当前事务隔离级别。查看当前事务隔离级别的 SQL 语句和运行结果如下:mysql> show variables like '%tx_isolation%';+---------------+-----------------+| Variable_name | Value原创 2020-10-19 21:50:39 · 975 阅读 · 0 评论 -
5、MySQL事务隔离级别详解
事务的隔离性就是指当多个事务同时运行时,各事务之间相互隔离,不可互相干扰。如果事务没有隔离性,就容易出现脏读、不可重复读和幻读等情况。为了保证并发时操作数据的正确性,数据库都会有事务隔离级别的概念。1) 脏读脏读是指一个事务正在访问数据,并且对数据进行了修改,但是这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。2) 不可重复读不可重复读是指在一个事务内,多次读取同一个数据。在这个事务还没有结束时,另外一个事务也访问了该同一数据。那么,在第一个事务中的两次读数据原创 2020-10-18 22:38:42 · 246 阅读 · 1 评论 -
4、MySQL设置事务自动提交(开启和关闭)
MySQL 默认开启事务自动提交模式,即除非显式的开启事务(BEGIN 或 START TRANSACTION),否则每条 SOL 语句都会被当做一个单独的事务自动执行。但有些情况下,我们需要关闭事务自动提交来保证数据的一致性。下面主要介绍如何设置事务自动提交模式。在 MySQL 中,可以通过 SHOW VARIABLES 语句查看当前事务自动提交模式,如下所示:mysql> SHOW VARIABLES LIKE 'autocommit';+---------------+-------+原创 2020-10-18 22:38:36 · 2570 阅读 · 0 评论 -
3、MySQL执行事务的语法和流程
MySQL 提供了多种存储引擎来支持事务。支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 REDO 日志实现,MyISAM 存储引擎不支持事务。拓展:任何一种数据库,都会拥有各种各样的日志,用来记录数据库的运行情况、日常操作、错误信息等,MySQL 也不例外。例如,当用户 root 登录到 MySQL 服务器,就会在日志文件里记录该用户的登录时间、执行操作等。为了维护 MySQL 服务器,经常需要在 MySQL 数据库中进行日志操作:UND原创 2020-10-18 22:38:31 · 1006 阅读 · 0 评论 -
2、事务的概念和特性
数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时,事务是作为最小的控制单元来使用的,特别适用于多用户同时操作的数据库系统。例如,航空公司的订票系统、银行、保险公司以及证券交易系统等。事务具有 4 个特性:即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolat原创 2020-10-18 22:38:22 · 751 阅读 · 0 评论 -
1、MySQL为什么需要事务?
在银行业务中,有一条记账原则,即有借有贷,借贷相等。为了保证这种原则,每发生一笔银行业务,就必须确保会计账目上借方科目和贷方科目至少各记一笔,并且这两笔账要么同时成功,要么同时失败。如果出现只记录了借方科目,或者只记录了贷方科目的情况,就违反了记账原则。会出现记错账的情况。在银行的日常业务中,只要是同一银行(如都是中国农业银行,简称农行),一般都支持账户间的直接转账。因此,银行转账操作往往会涉及两个或两个以上的账户。在转出账户的存款减少一定金额的同时,转入账户的存款就要增加相应的金额。下面,在 MySQ原创 2020-10-18 22:38:17 · 689 阅读 · 0 评论