精华内容
下载资源
问答
  • MySQL——事务(Transaction)详解

    万次阅读 多人点赞 2018-03-23 13:05:50
    Transaction 事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元) 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成 ...

    该博客详解MySQL中的事务

    一、事务定义

    • Transaction
    • 事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)
    • 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成
    • 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同

    二、转账操作理解事务

    关于银行账户转账操作,账户转账是一个完整的业务,最小的单元,不可再分————————也就是说银行账户转账是一个事务

    以下是银行账户表t_act(账号、余额),进行转账操作

    actno		balance
    1			500
    2			100
    

    转账操作

    update t_act set balance=400 where actno=1;
    update t_act set balance=200 where actno=2;
    

    以上两台DML语句必须同时成功或者同时失败。最小单元不可再分,当第一条DML语句执行成功后,并不能将底层数据库中的第一个账户的数据修改,只是将操作记录了一下;这个记录是在内存中完成的;当第二条DML语句执行成功后,和底层数据库文件中的数据完成同步。若第二条DML语句执行失败,则清空所有的历史操作记录,要完成以上的功能必须借助事务


    三、事务四大特征(ACID)

    • 原子性(A):事务是最小单位,不可再分
    • 一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
    • 隔离性(I):事务A和事务B之间具有隔离性
    • 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

    ##四、关于事务的一些术语

    • 开启事务:Start Transaction
    • 事务结束:End Transaction
    • 提交事务:Commit Transaction
    • 回滚事务:Rollback Transaction

    五、和事务相关的两条重要的SQL语句(TCL)

    • commit:提交
    • rollback:回滚

    六、事务开启的标志?事务结束的标志?

    开启标志:

    - 任何一条DML语句(insert、update、delete)执行,标志事务的开启
    

    结束标志(提交或者回滚):

    -  提交:成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步
    -  回滚:失败的结束,将所有的DML语句操作历史记录全部清空
    

    七、事物与数据库底层数据

    在事物进行过程中,未结束之前,DML语句是不会更改底层数据,只是将历史操作记录一下,在内存中完成记录。只有在事物结束的时候,而且是成功的结束的时候,才会修改底层硬盘文件中的数据


    八、在MySQL中,事务提交与回滚

    在MySQL中,默认情况下,事务是自动提交的,也就是说,只要执行一条DML语句就开启了事物,并且提交了事务

    以上的自动提交机制是可以关闭的

    对t_user进行提交和回滚操作
    提交操作(事务成功)
    • start transaction

    • DML语句

    • commit

        mysql> start transaction;#手动开启事务
        mysql> insert into t_user(name) values('pp');
        mysql> commit;#commit之后即可改变底层数据库数据
        mysql> select * from t_user;
        +----+------+
        | id | name |
        +----+------+
        |  1 | jay  |
        |  2 | man  |
        |  3 | pp   |
        +----+------+
        3 rows in set (0.00 sec)
      
    回滚操作(事务失败)
    • start transaction

    • DML语句

    • rollback

        mysql> start transaction;
        mysql> insert into t_user(name) values('yy');
        mysql> rollback;
        mysql> select * from t_user;
        +----+------+
        | id | name |
        +----+------+
        |  1 | jay  |
        |  2 | man  |
        |  3 | pp   |
        +----+------+
        3 rows in set (0.00 sec)
      

    九、事务四大特性之一————隔离性(isolation)

    1. 事物A和事物B之间具有一定的隔离性
    2. 隔离性有隔离级别(4个)
      • 读未提交:read uncommitted
      • 读已提交:read committed
      • 可重复读:repeatable read
      • 串行化:serializable

    1、 read uncommitted

    - 事物A和事物B,事物A未提交的数据,事物B可以读取到
    - 这里读取到的数据叫做“脏数据”
    - 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别
    

    2、read committed

    - 事物A和事物B,事物A提交的数据,事物B才能读取到
    - 这种隔离级别高于读未提交
    - 换句话说,对方事物提交之后的数据,我当前事物才能读取到
    - 这种级别可以避免“脏数据”
    - 这种隔离级别会导致“不可重复读取”
    - Oracle默认隔离级别
    

    3、repeatable read

    - 事务A和事务B,事务A提交之后的数据,事务B读取不到
    - 事务B是可重复读取数据
    - 这种隔离级别高于读已提交
    - 换句话说,对方提交之后的数据,我还是读取不到
    - 这种隔离级别可以避免“不可重复读取”,达到可重复读取
    - 比如1点和2点读到数据是同一个
    - MySQL默认级别
    - 虽然可以达到可重复读取,但是会导致“幻像读”
    

    4、serializable

    - 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
    - 这种隔离级别很少使用,吞吐量太低,用户体验差
    - 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发
    

    十、隔离级别与一致性关系

    这里写图片描述

    十一、设置事务隔离级别

    方式一

    • 可以在my.ini文件中使用transaction-isolation选项来设置服务器的缺省事务隔离级别。

      • 该选项值可以是:

          – READ-UNCOMMITTED
          – READ-COMMITTED
          – REPEATABLE-READ
          – SERIALIZABLE
        
          •	例如:
          [mysqld]
          transaction-isolation = READ-COMMITTED
        

    方式二

    • 通过命令动态设置隔离级别
      • 隔离级别也可以在运行的服务器中动态设置,应使用SET TRANSACTION ISOLATION LEVEL语句。
      • 其语法模式为:

        		SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
        		其中的<isolation-level>可以是:
        	–	READ UNCOMMITTED
        	–	READ COMMITTED
        	–	REPEATABLE READ
        	–	SERIALIZABLE
        	•	例如: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
      

    十二、隔离级别的作用范围

    •	事务隔离级别的作用范围分为两种: 
    –	全局级:对所有的会话有效 
    –	会话级:只对当前的会话有效 
    •	例如,设置会话级隔离级别为READ COMMITTED :
    mysql> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    或:
    mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
    •	设置全局级隔离级别为READ COMMITTED : 
    mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
    

    十三、查看隔离级别

    •	事务隔离级别的作用范围分为两种: 
    –	全局级:对所有的会话有效 
    –	会话级:只对当前的会话有效 
    •	例如,设置会话级隔离级别为READ COMMITTED :
    mysql> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    或:
    mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
    •	设置全局级隔离级别为READ COMMITTED : 
    mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
    
    展开全文
  • Transaction

    千次阅读 2012-04-20 23:59:40
    TransactionId 是一个32位的无符号整数,事务和子事务的id,全是按照一个顺序来的,当这个32位整数用完一圈后,就需要一些特殊的操作 /*---------- * Check to see if it's safe to assign another XID. This ...

    TransactionId 是一个32位的无符号整数,事务和子事务的id,全是按照一个顺序来的,当这个32位整数用完一圈后,就需要一些特殊的操作

    /*----------
    	 * Check to see if it's safe to assign another XID.  This protects against
    	 * catastrophic data loss due to XID wraparound.  The basic rules are:
    	 *
    	 * If we're past xidVacLimit, start trying to force autovacuum cycles.
    	 * If we're past xidWarnLimit, start issuing warnings.
    	   To avoid a database shutdown, execute a database-wide VACUUM in that database.
    	 * If we're past xidStopLimit, refuse to execute transactions, unless
    	 * we are running in a standalone backend (which gives an escape hatch
    	 * to the DBA who somehow got past the earlier defenses).
               Stop the postmaster and use a standalone backend to vacuum that database.
    	 *----------
    	 */


     

     

     

     

    展开全文
  • transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 284 Accepted Submission(s): 125 Problem D

    transaction transaction transaction

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)
    Total Submission(s): 284    Accepted Submission(s): 125



    Problem Description
    Kelukin is a businessman. Every day, he travels around cities to do some business. On August 17th, in memory of a great man, citizens will read a book named "the Man Who Changed China". Of course, Kelukin wouldn't miss this chance to make money, but he doesn't have this book. So he has to choose two city to buy and sell.
    As we know, the price of this book was different in each city. It is ai yuan in it city. Kelukin will take taxi, whose price is 1yuan per km and this fare cannot be ignored.
    There are n−1 roads connecting n cities. Kelukin can choose any city to start his travel. He want to know the maximum money he can get.



    Input
    The first line contains an integer T (1≤T≤10) , the number of test cases.
    For each test case:
    first line contains an integer n (2≤n≤100000) means the number of cities;
    second line contains n numbers, the ith number means the prices in ith city; (1≤Price≤10000)
    then follows n−1 lines, each contains three numbers x, y and z which means there exists a road between x and y, the distance is zkm (1≤z≤1000).



    Output
    For each test case, output a single number in a line: the maximum money he can get.



    Sample Input
    1
    4
    10 40 15 30
    1 2 30
    1 3 2
    3 4 10


    Sample Output
    8


    Source
    2017 ACM/ICPC Asia Regional Shenyang Online


    Recommend

    liuyiding


    题意:

    给出一棵树,每个点都有点权,问取两个点,使得T-S-sumw为最大(T为终点的点权,S为起点的点权,sumw为S到T的路径长度),可取相同的点。

    思路:

    正解应该是树dp,想看树dp的请到隔壁,我蒟蒻并不会,网络赛上是队友敲的。我这里给出另外一种解法,思路来自ACM贴吧群dalao。

    求最短路(我跑的是最长路),你加个源点,汇点,源点到树上的点边权为ci,树上点到汇点边权为-ci,ci为该点点权,树上点与点之间边权也取反,转化一下也可以跑最短。

    费用流也可做的样子?

    示例程序:

    /*
    Problem : 6201 ( transaction transaction transaction )     Judge Status : Accepted
    RunId : 22050191    Language : G++    Code Len : 1391B
    Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
    */
    #include <bits/stdc++.h>
    #define LDQ 1000000007
    #define QAQ 0x3f3f3f3f
    using namespace std;
    struct jj
    {
        int v,c,next;
    }w[400000];
    int a[100001],h[100002],numw;
    void insert(int u,int v,int c)
    {
        w[numw].v=v;
        w[numw].c=c;
        w[numw].next=h[u];
        h[u]=numw++;
    }
    int spfa(int s,int t)
    {
        int i,dis[100002],v[100002];
        queue<int>q;
        memset(dis,0,sizeof(dis));
        memset(v,0,sizeof(v));
        q.push(s);
        while(q.empty()==0)
        {
            s=q.front();
            q.pop();
            v[s]=0;
            for(i=h[s];i!=-1;i=w[i].next)
            {
                if(dis[w[i].v]<dis[s]+w[i].c)
                {
                    dis[w[i].v]=dis[s]+w[i].c;
                    if(v[w[i].v]==0)
                    {
                        v[w[i].v]=1;
                        q.push(w[i].v);
                    }
                }
            }
        }
        return dis[t];
    }
    int main()
    {
        int t,n,i,u,v,c;
        scanf("%d",&t);
        while(t--)
        {
            memset(h,-1,sizeof(h));
            numw=0;
            scanf("%d",&n);
            for(i=1;n>=i;i++)
            {
                scanf("%d",&a[i]);
                insert(0,i,a[i]);					//实际上我把它当汇点了
                insert(i,n+1,-a[i]);				//那么这个就是源点
            }
            for(i=1;n>i;i++)
            {
                scanf("%d %d %d",&u,&v,&c);
                insert(u,v,-c);					//题目中跑路所要的花费
                insert(v,u,-c);
            }
            printf("%d\n",spfa(0,n+1));
        }
        return 0;
    }
    展开全文
  • TransactionSynchronization是一个回调接口,用于在事务执行过程中的重要时间点执行额外的逻辑,AbstractPlatformTransactionManager中通过TransactionSynchronizationManager间接调用绑定到当前事务所在线程的...

    TransactionSynchronization是一个回调接口,用于在事务执行过程中的重要时间点执行额外的逻辑,AbstractPlatformTransactionManager中通过TransactionSynchronizationManager间接调用绑定到当前事务所在线程的TransactionSynchronization集合的对应的回调方法;

    TransactionSynchronizationManager使用ThreadLocal管理当前事务的TransactionSynchronization集合;

    ResourceHolderSynchronization是用来同步资源状态的,这里的资源就是Spring 事务框架中的资源的概念,就是JDBC里的Connection,Hibernate里的Session,JPA里的EntityManager,Kafka里的Producer;回到ResourceHolderSynchronization,比如KafkaResourceSynchronization提供的能力是当前ResourceHolderSynchronization(KafkaResourceSynchronization)对象所绑定的事务完成之后,间接调用kafka的Producer的commitTransaction或者abortTransaction方法。

    展开全文
  • org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction这部分的具体地方为Transaction tr =(Transaction) session.beginTransaction(); 错误原因:包倒错了,应该导入的包是...
  • Transaction Costs

    2018-06-12 16:28:22
    Transaction Costs SHARE What are 'Transaction Costs'Transaction costs are expenses incurred when buying or selling a good or service. Transaction costs represent the labor required to bring a good ...
  • TransactionSynchronization

    千次阅读 2019-05-05 13:49:09
    TransactionSynchronization。TransactionSynchronization是可以注册到事务处理过程中的回调接口。它就像是事务处理的事件监听器,当事务处理的某些规定时点发生时,会调用TransactionSynchronization上的一些方法来...
  • Transaction Types

    千次阅读 2012-08-21 10:44:30
    Transaction Type = Transaction Source Type + Transaction Action Type TRANSACTIONTYPE ID TRANSACTIONNAME DESCRIPTION TRANSACTIONSOURCE ID TRANSACTIONACTION ID
  • TransactionSystemException

    千次阅读 2018-09-19 14:41:31
    无法解决的问题:最终解决方案将Log...org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while...
  • Transaction 事务

    2016-09-15 20:01:10
    Transaction 事务
  • What are transaction attributes? Spring transactions allow setting up the propagation behavior, isolation, timeout and read only settings of a transaction. Before we delve into the details, here are s...
  • Django transaction

    2015-05-14 13:31:17
    数据库事务 (Transaction) 将整个http request包裹在transaction中 更明确地transaction控制 MySQL中使用transaction 这里讲一下自己手动增加事务 不做数据修改的操作, 应当排除在transaction之外 做数据修改的操作,...
  • org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create Poolable...
  • rollback transaction

    2016-09-08 09:37:30
    http://msdn.microsoft.com/en-us/library/ms181299.aspx ...In stored procedures, ROLLBACK TRANSACTION statements without a savepoint_name or transaction_name roll back all statements to the outermost BEGIN
  • Spring Kafka Transaction

    千次阅读 2019-03-07 20:22:49
    1. plain kafka client api transaction个三种情况(1. comsumer ack ,2 comsumer + producer commit,3 comsumer +producer@send 一块commit) 2. KafkaTransactionManager详解,模板化了上述的哪些操作 3. ...
  • Transaction

    2016-03-09 23:25:29
    源代码:public class Transaction implements Comparable<Transaction> { private final String who; // customer private final Date when; // date private final double amount; // amou
  • TransactionSystemException: Could not roll back Hibernate Transaction; Transaction not started 解决办法: @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = f
  • C# Transaction

    2018-01-25 21:34:15
    .NET Transaction 机制 说到交易机制,简单来说就是例如我们在汇入订单时,可能会连动好几个SQL指令,但是如果哪天刚好中段资料有问题时,这样会导致insert一半,后续可能导致库存乱掉或是订单明细会有问题,因此...
  • java事务实现世界可分为两种 一种是jdbc事务,也叫本地事务,令外一种是JTA事务,也叫全局事务。...javax.transaction.Synchronization 定义了事务完成前后改做的事,使用方式一般是先注册,在适当的时机调javax.trans
  • MTL_TRANSACTIONS_INTERFACE和MTL_MATERIAL_TRANSACTIONS_TEMP有三个类似的字段:TRANSACTION_HEADER_ID & TRANSACTION_BATCH_ID & TRANSACTION_BATCH_SEQ以下为eTRM里关于这三个字段的解释:TRANSACTION_HEADER_ID:...
  • 相关文档:Spring官方文档,Javadoc ...在Spring官方文档中只对三种Transaction Propagation模式做了说明: Required RequiresNew Nested 并没有对另外四种做说明: SUPPORTS MANDATORY NOT_SUPPORTED NEVER
  • SET TRANSACTION 语法

    千次阅读 2017-06-29 21:50:39
    SET [GLOBAL | SESSION] TRANSACTION transaction_characteristic [, transaction_characteristic] ... transaction_characteristic: ISOLATION LEVEL level | READ WRITE | READ ONLY level: RE
  • 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) ...这个错误信息是ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。 可是网站搜索不到关于这个事务信息。
  • JDBC Transaction

    2013-05-22 10:30:50
    Transaction let you control how and when a transaction should commit into database.   //transaction block start//SQL insert statement//SQL update statement//SQLdelete statemetn//transa
  • 代码如下所示:getReference接口当实体不存在时会抛出EntityNotFoundException异常,在下面的上层调用会捕获,但是调用会抛出Could not commit JPA transaction RollbackException: Transaction marked as rollback...
  • Business transaction

    千次阅读 2015-08-10 15:28:24
    Business transaction processing is controlled by the event handler, which enables communication between interrelated subobjects. When an event is triggered by a subobject, the event handler finds the
  • set transaction

    千次阅读 2013-02-23 09:02:19
    set transaction 命令有以下功能  1、给一个事物命名  set transaction name “tname”;    2、指定一个事物使用回滚段  set transaction use rollback segment “回滚段名";   3、建立事物隔离级...
  • 事务transaction 详解

    2019-02-22 14:29:14
    事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(.....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,755
精华内容 33,502
关键字:

transaction