mysql事务

MySQL binlog

五迷三道 提交于 2019-12-03 08:20:22
表结构 CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `col1` int(10) unsigned DEFAULT NULL, `col2` varchar(45) DEFAULT NULL, `col3` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 mysql 版本 ➜ ~ mysql -V mysql Ver 14.14 Distrib 5.7.15, for osx10.11 (x86_64) using EditLine wrapper mysql的安装请看 https://my.oschina.net/xinxingegeya/blog/751154 启动mysql的binlog,在配置文件中添加, [mysqld] # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. log_bin = mysql-bin # These are commonly set, remove the # and set

事物的隔离级别

假装没事ソ 提交于 2019-12-03 08:06:24
Begin: mysql 事物默认是自动提交的 select @@autocommit 查询 (1表示自动提交 ,0表示不自动提交) set @@autocommit =0 select @@transaction_isolation 查询事物的默认属性 事物: 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。 例如:A——B转帐,对应于如下两条sql语句 update account set money=money-100 where name=‘a’; update account set money=money+100 where name=‘b’; 事物特性acid 原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 隔离性(Isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。 涉及命令 commit() rollback() start

day37 事务

拜拜、爱过 提交于 2019-12-03 07:56:36
复制终端命令 tee D:/a.lg #将这行下面的命令复制到目录下 事务 通俗的说,事务指的是一组操作,要么都执行成功,要么都执行失败,只针对表数据,不能表字段。 语法: start transaction; sql语句;#sql语句只会在start和cimmit都存在才会执行 commit/roolback; start transaction:开启事务 commit :提交 rollback:回滚,撤销事务的所有影响 例子: 我去银行给朋友汇款,我卡上有1000,朋友卡里有1000,我给盆友转账100,如果我的钱刚扣,而朋友的钱没有加时,网线断了,怎么办 演示: create table user( id int auto_increment primary key, name varchar(32) not null default '', salary int not null default 0 )charset=utf8; insert into user (name,salary) values ('zekai',1000),('min',1000); start transaction; update user set salary=900 where name='zekai'; select * from user; update user set salary

11.1 总结

痴心易碎 提交于 2019-12-03 07:49:14
上节课回顾: 索引: 索引的作用:提高查询效率,好比字典中的目录。 底层原理:B+树,索引本质上就是一个特殊文件。 索引的分类: 主键索引:加快查询速度+不能重复+不能为空 ```python 增加: 第一种方法: create table 表名( id int auto_increment primary key #主键自增id ) 注意:auto_increment 依赖primary key,而primary key不依赖auto_increment 第二种方法: alter table 表名 change 旧字段名 新字段名 数据类型 自增 主键; 第三种方法: alter table 表名 add 主键(字段名) 场景:一般是加在id这列 删除: 如果要删除带有auto_increment的primary key 需要提前删除auto_increment。 alter table 表名 drop 主键; ``` ``` ​ 唯一索引:加快查询速度+不能重复 ##增加: 第一种方法: create table 表名( id int auto_increment primary key, #主键自增id phone int not null default 0, name varchar(32) unique 索引名(phone字段名) ) 第二种方法: alter

事务、视图、触发器、存储过程、函数、备份

你离开我真会死。 提交于 2019-12-03 07:47:05
目录 事务 基本原理: 使用方法 事务的特性 存储引擎 视图 触发器 存储过程 函数 数据库备份 事务 事务是什么 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言书写的用户程序的执行所引起。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。 通俗来讲,事务指一组操作,要么都执行成功,要么都执行失败。 基本原理: Mysql允许将事务统一进行管理(存储引擎INNODB),将用户所做的操作,暂时保存起来,不直接放到数据表(更新),等到用于确认结果之后再进行操作。 使用方法 start transaction; sql 语句 commit(成功提交)/rollback(回滚,清空操作); 例子: --模拟银行转账 --先准备数据 create table user( id int auto_increment primary key, name varchar(32) not null default '', salary int not null default 0 )charset utf8; insert into user(name,salary) values ('cwz',1000),('张三',2000); -

事务与锁

天大地大妈咪最大 提交于 2019-12-03 07:25:00
事务 初学的时候,感觉事务的四大特性就那么回事,不就是一堆事要么完成,要么全部失败吗。还有经常说的脏读,幻读,不可重复读根本无法理解,就是那个存款取款的例子,我修改了数据,对方看到我修改的数据,这不很正常吗。现在看来,当时根本就不知道并发是什么鬼,更何谈并发事物了。 然后给你来一堆名词,共享锁,排它锁,悲观锁,乐观锁...... 想想就觉得那时候能记下来已经是奇迹了。 Spring 还给事务弄了一个传播机制的家伙, Spring 事务传播机制可以看这篇文章 。 本文应该来说是对初学者的福音,有一定经验的人看的话应该也会有收获。 事务的四大特性ACID 这个是刚入门面试的时候必问一个 面试题 ,刚入行的时候我是硬生生背下来的。 原子性(Atomicity) 一件事情的所有步骤要么全部成功,要么全部失败,不存在中间状态。 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(Isolation) 两个事务之间是隔离程度,具体的隔离程度由隔离级别决定,隔离级别有 读未提交的 (read-uncommitted) 读提交的 (read-committed) 可重复读 (repeatable-read) 串行 (serializable) 持久性 (Durability) 一个事务提交后

mysql面试题三

帅比萌擦擦* 提交于 2019-12-03 07:23:44
1、MySQL的复制原理以及流程 (1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)

mysql面试题

◇◆丶佛笑我妖孽 提交于 2019-12-03 07:22:57
事务四大特性 原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态 一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的; 隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 MySQL 的事务隔离级别 未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read) 索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B

事务与锁

早过忘川 提交于 2019-12-03 07:22:46
事务 初学的时候,感觉事务的四大特性就那么回事,不就是一堆事要么完成,要么全部失败吗。还有经常说的脏读,幻读,不可重复读根本无法理解,就是那个存款取款的例子,我修改了数据,对方看到我修改的数据,这不很正常吗。现在看来,当时根本就不知道并发是什么鬼,更何谈并发事物了。 然后给你来一堆名词,共享锁,排它锁,悲观锁,乐观锁...... 想想就觉得那时候能记下来已经是奇迹了。 Spring 还给事务弄了一个传播机制的家伙, Spring 事务传播机制可以看这篇文章 。 本文应该来说是对初学者的福音,有一定经验的人看的话应该也会有收获。 事务的四大特性ACID 这个是刚入门面试的时候必问一个面试题,刚入行的时候我是硬生生背下来的。 原子性(Atomicity) 一件事情的所有步骤要么全部成功,要么全部失败,不存在中间状态。 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(Isolation) 两个事务之间是隔离程度,具体的隔离程度由隔离级别决定,隔离级别有 读未提交的 (read-uncommitted) 读提交的 (read-committed) 可重复读 (repeatable-read) 串行 (serializable) 持久性 (Durability) 一个事务提交后

事务

落花浮王杯 提交于 2019-12-03 07:15:40
什么是事务 : ​ 事务是指逻辑上的一组操作,这种操作要么全部发生(提交成功),要么全部失败(回滚)。 举例 : 张三李四 进行 转账的操作 ​ 张三向转账李四 1000元 张三余额-1000元 李四余额+1000元 ​ 不应该出现的是 在转账过程中由于一些意外,使张三的余额减去了1000元, 而李四并没有收到这笔钱。 使 用事务来进行管理。 必须全部成功(张三扣款,李四收款)或者一起失败(张三李四存款不变)。 事务的四大特性(ACID): ​ 原子性(Atomicity):是指事务一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 不能够单独运行。把一组操作放入事务中。 ​ 一致性(Consistency):事务执行的前后,数据的完整性要得到保证。 ​ 隔离性(Isolation):多个用户并发访问数据库的时候,一个用户的事务不会被其他用户的事务干扰,多个并发事务之间的数据要相互隔离。解决多个用户对同一个数据进行操作,数据库会有事务的隔离级别来解决。 ​ 持久性(Durability):一个事务一旦被提交,它对数据库中数据的的改变是永久性,即使数据库发生故障也不应该对其有影响。 并发访问问题----由隔离性引起 : ​ 1.脏读: ​ 指一个事务正在访问数据,并对其进行了修改,且未提交到数据库中。这时候另一个数据也访问这个数据,然后使用这个数据