mysql事务

jdbc就是这么简单

匿名 (未验证) 提交于 2019-12-02 20:37:20
一、JDBC JAVA Database Connectivity java 数据库连接. JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。 SUN公司提供的一种数据库访问规则、规范, 由于数据库种类较多,并且java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。 我们的java程序只要使用sun公司提供的jdbc驱动即可。 我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。 1.Driver接口 Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如: 装载MySql驱动:Class.forName("com.mysql.jdbc.Driver"); 装载Oracle驱动

MySQL 日志系统之 redo log 和 binlog

↘锁芯ラ 提交于 2019-12-02 18:54:28
之前我们了解了一条查询语句的执行流程,并介绍了执行过程中涉及的处理模块。一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条 SQL 更新语句的执行流程又是怎样的呢? 首先我们创建一个表 user_info,主键为 id,创建语句如下: CREATE TABLE `T` ( `ID` int( 11) NOT NULL, `c` int( 11) DEFAULT NULL, PRIMARY KEY ( `ID`) ) ENGINE= InnoDB DEFAULT CHARSET=utf8mb4; 插入一条数据: INSERT INTO T VALUES ('2', '1'); 如果要将 ID=2 这一行的 c 的值加 1,SQL 语句为: UPDATE T SET c = c + 1 WHERE ID = 2; 前面介绍过 SQL 语句基本的执行链路,这里把那张图拿过来。因为,更新语句同样会走一遍查询语句走的流程。 通过连接器,客户端与 MySQL 建立连接 update 语句会把 T 表上的所有查询缓存结果清空 分析器会通过词法分析和语法分析识别这是一条更新语句 优化器会决定使用 ID 这个索引(聚簇索引) 执行器负责具体执行,找到匹配的一行,然后更新 更新过程中还会涉及 redo log(重做日志)和 binlog(归档日志

什么是事务?事务的基本操作、事务的隔离性问题、事务的ACID特性

断了今生、忘了曾经 提交于 2019-12-02 18:37:52
文章目录 1.什么是事务? 2.事务的基本操作 2.事务操作的注意事项 3.事务的隔离级别 3.1 无隔离性的问题 3.1.1 脏读 3.1.2 不可重复读 3.1.3 幻读 3.2 事务的隔离级别 3.2.1 设置事务的隔离级别 3.2.2 查看当前的隔离级别 4.事务的特性 4.1 原子性 4.2 一致性 4.3 隔离性 4.4 持久性 1.什么是事务?   事务是数据库中一个单独的执行单行(Unit),事务就是由一种数据操纵语言DML语句组成,这一组DML要么全不成功要么全部失败,是一个整体。   以网上购物为例,其交易过程包括以下几步: 更新客户所购商品的库存信息 保存客户付款信息 生成订单并且保存到数据库中 更新用户相关信息,例如购物数量等   在正常情况下,这些操作都将顺利执行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果遇到断电或者是其他意外情况,导致这一系列过程中任何一个环节出了差错(例如在更新商品库存信息时发生异常、顾客银行账户余额不足等),都将导致整个交易过程失败。而一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,例如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态,即原有的库存信息没有被更新,用户也没有付款,订单也没有生成。否则数据库的信息将会不一致,或者出现更为严重的不可预测的后果。

mysql,redis

雨燕双飞 提交于 2019-12-02 18:35:22
1、搭建mysql服务器,并实现主主复制、半同步复制 存储引擎: 表类型:也称为“表类型”,表级别概念,不建议在同一个库中的表上使用不同的ENGINE; CREATE TABLE ... ENGINE[=]STORAGE_ENGINE_NAME ... SHOW TABLE STATUS 常见的存储引擎: MyISAM, Aria, InnoDB, MRG_MYISAM, CSV, BLACKHOLE, MEMORY, PERFORMANCE_SCHEMA, ARCHIVE, FEDERATED InnoDB:InnoBase Percona-XtraDB, Supports transactions, row-level locking, and foreign keys 数据存储于“表空间(table space)"中: (1) 所有数据库中的所有类型为InnoDB的表的数据和索引存储于同一个表空间中; 表空间文件:datadir定义的目录中 文件:ibdata1, ibdata2, ... (2) innodb_file_per_table=ON,意味着每表使用单独的表空间文件; 每表的数据文件(数据和索引,存储于数据库目录)存储于自己专用的表空间文件中,并存储于数据库目录下: tbl_name.ibd 表结构的定义:在数据库目录,tbl_name.frm 事务型存储引擎

Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题

一笑奈何 提交于 2019-12-02 18:24:29
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能。 欢迎大家加我微信itsoku一起交流java、算法、数据库相关技术。 这是Mysql系列第27篇。 本篇文章我们先来看一下mysql是如何确保数据不丢失的,通过本文我们可以了解mysql内部确保数据不丢失的原理,学习里面优秀的设计要点,然后我们再借鉴这些优秀的设计要点进行实践应用,加深理解。 预备知识 mysql内部是使用b+树的结构将数据存储在磁盘中,b+树中节点对应mysql中的页,mysql和磁盘交互的最小单位为页,页默认情况下为16kb,表中的数据记录存储在b+树的叶子节点中,当我们需要修改、删除、插入数据时,都需要按照页来对磁盘进行操作。 磁盘顺序写比随机写效率要高很多,通常我们使用的是机械硬盘,机械硬盘写数据的时候涉及磁盘寻道、磁盘旋转寻址、数据写入的时间,耗时比较长,如果是顺序写,省去了寻道和磁盘旋转的时间,效率会高几个数量级。 内存中数据读写操作比磁盘中数据读写操作速度高好多个数量级。 mysql确保数据不丢失原理分析 我们来思考一下,下面这条语句的执行过程是什么样的: start transaction; update t_user set name = '路人甲Java' where user_id = 666; commit; 按照正常的思路,通常过程如下: 找到user_id

03 | 事务隔离:为什么你改了我还看不见?

↘锁芯ラ 提交于 2019-12-02 17:04:23
事务简单来说就是一组数据的操作,要么全部成功要不全部失败。在MySQL中,事务支持是在引擎层实现的,但并不是所有引擎都支持事务,比如MySQL的原生引擎就不支持事务,这也是MyISAM被InnoDB取代的原因之一。 来源: https://www.cnblogs.com/charon2/p/11756261.html

spring配置事务管理及事物传播行为介绍(@Transactional(propagation = Propagation.SUPPORTS))

落花浮王杯 提交于 2019-12-02 16:39:58
转载 Spring配置事务管理,service端通过@Transactional注解 使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 <beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:tx=”http://www.springframework.org/schema/tx” xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd”> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <tx:annotation-driven transaction-manager=”transactionManager” proxy-target-class=

大白话关系型数据库:索引,事务,锁

て烟熏妆下的殇ゞ 提交于 2019-12-02 16:04:40
感谢阅读。也欢迎大家可以去看《MySQL技术内幕》和橘黄色的《算法》。 前言 数据库 是软件开发的核心,因为一个软件如果要有状态,也就是它记得你什么时候操作过什么,那么数据要持久化,总要存储在某些地方,这些地方也就是数据库。当然,计算机上面的文件夹,文件,你也可以把它当成数据库,也就是文件数据库,现在很火的hadoop大数据系统其实就是一个分布式文件数据库。 在没有计算机的年代,记账相关的财务都是用纸来记录的,叫账本。而现在,我们有了计算机,有了编程语言,有了数据库系统,所以我们可以编程,将数据插入数据库,查找出数据库中的数据。 历史的选择,关系型数据库因为很符合人的直觉,所以使用的范围最广。顾名思义,关系型数据库,就是数据之间是有关系约束。在这篇文章中, 关系型数据库 这个词指的是持久化的数据组织形式的综合体,而 关系型数据库管理系统 指的是操纵这些数据组织形式综合体的软件组合。一个是数据本身,一个是操纵数据软件本身。 大白话 关系型数据库,可以包含很多个二维化的数据结构,叫做表,有行列之分,就像棋盘一样。列是字段,比如性别,年龄,姓名,行是一行行记录: 表1: 人口登记表 编号 性别 年龄 姓名 1 男 22 大大 2 女 34 次奥 非常的直观。 每一行记录可以有个主键,不可重复,比如编号,用以区分这行记录。还可以多个表之间有关系约束,叫做外键: 表2: 资产表 编号

大白话关系型数据库:索引,事务,锁

瘦欲@ 提交于 2019-12-02 14:53:04
感谢阅读。也欢迎大家可以去看《MySQL技术内幕》和橘黄色的《算法》。 前言 数据库是软件开发的核心,因为一个软件如果要有状态,也就是它记得你什么时候操作过什么,那么数据要持久化,总要存储在某些地方,这些地方也就是数据库。当然,计算机上面的文件夹,文件,你也可以把它当成数据库,也就是文件数据库,现在很火的 hadoop 大数据系统其实就是一个分布式文件数据库。 在没有计算机的年代,记账相关的财务都是用纸来记录的,叫账本。而现在,我们有了计算机,有了编程语言,有了数据库系统,所以我们可以编程,将数据插入数据库,查找出数据库中的数据。 历史的选择,关系型数据库因为很符合人的直觉,所以使用的范围最广。顾名思义,关系型数据库,就是数据之间是有关系约束。在这篇文章中, 关系型数据库 这个词指的是持久化的数据组织形式的综合体,而 关系型数据库管理系统 指的是操纵这些数据组织形式综合体的软件组合。一个是数据本身,一个是操纵数据软件本身。 大白话 关系型数据库,可以包含很多个二维化的数据结构,叫做表,有行列之分,就像棋盘一样。列是字段,比如性别,年龄,姓名,行是一行行记录: 表1: 人口登记表 编号 性别 年龄 姓名 1 男 22 大大 2 女 34 次奥 非常的直观。 每一行记录可以有个主键,不可重复,比如编号,用以区分这行记录。还可以多个表之间有关系约束,叫做外键: 表2: 资产表 编号

[转帖]MySQL的又一神器-锁,MySQL面试必备

心已入冬 提交于 2019-12-02 14:14:41
MySQL的又一神器-锁,MySQL面试必备 https://segmentfault.com/a/1190000020762791 lock 低一级的是 latch 原文链接:blog.ouyangsihai.cn >> MySQL的又一神器-锁,MySQL面试必备 在看这篇文章之前,我们回顾一下前面的几篇关于MySQL的文章,应该对你读下面的文章有所帮助。 InnoDB与MyISAM等存储引擎对比 面试官问你B树和B+树,就把这篇文章丢给他 MySQL的B+树索引的概念、使用、优化及使用场景 MySQL全文索引最强教程 MySQL的又一神器-锁,MySQL面试必备 1 什么是锁 1.1 锁的概述 在生活中锁的例子多的不能再多了,从古老的简单的门锁,到密码锁,再到现在的指纹解锁,人脸识别锁,这都是锁的鲜明的例子,所以,我们理解锁应该是非常简单的。 再到MySQL中的锁,对于MySQL来说,锁是一个很重要的特性,数据库的锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性,这样才能保证在高并发的情况下,访问数据库的时候,数据不会出现问题。 1.2 锁的两个概念 在数据库中,lock和latch都可以称为锁,但是意义却不同。 Latch 一般称为 闩锁 (轻量级的锁),因为其要求锁定的时间必须非常短。若持续的时间长,则应用的性能会非常差,在InnoDB引擎中