복붙노트

[SQL] 한 번에 여러 SQL 문을 실행 MyBatis로, 그 수 있습니까?

SQL

한 번에 여러 SQL 문을 실행 MyBatis로, 그 수 있습니까?

이 일 개 이동에 여러 SQL 문을 실행할 수 있는지 궁금했다. 예를 들어 내가 여러 테이블에서 행을 삭제할 것인지 시나리오는, 내가 좋아하는 일을 할 수있는 방법이있다 ..

<delete id="delete" parameterType="String">
    DELETE FROM DUMMYTABLE_A where X=${value}
    DELETE FROM DUMMYTABLE_B where X=${value}
</delete>

해결법

  1. ==============================

    1.네, 대부분의 데이터베이스이 할 수 있습니다. 일반적으로 당신이 뭔가와 SQL 문을 구분해야합니다. 포스트 그레스와 MySQL에서는 세미콜론입니다 (;). 마이크로 소프트 SQL 서버에서는 키워드 GO를 사용해야합니다. [2013년 5월 업데이트 : SQL 서버 2012로, 당신은 당신의 문을 구분하는 세미콜론을 사용해야 할 수 있습니다. SQL 서버 2012 (예. 다음 버전 이후) 한 후이 필수가 될 것입니다. GO를 사용하여 현재) SQL2012과 그 이후의 일을 할 수있는 사용되지 않는 방법입니다. ]

    네, 대부분의 데이터베이스이 할 수 있습니다. 일반적으로 당신이 뭔가와 SQL 문을 구분해야합니다. 포스트 그레스와 MySQL에서는 세미콜론입니다 (;). 마이크로 소프트 SQL 서버에서는 키워드 GO를 사용해야합니다. [2013년 5월 업데이트 : SQL 서버 2012로, 당신은 당신의 문을 구분하는 세미콜론을 사용해야 할 수 있습니다. SQL 서버 2012 (예. 다음 버전 이후) 한 후이 필수가 될 것입니다. GO를 사용하여 현재) SQL2012과 그 이후의 일을 할 수있는 사용되지 않는 방법입니다. ]

    MySQL은 / ​​포스트 그레스 예 :

     DELETE FROM DUMMYTABLE_A where X=${value};
     DELETE FROM DUMMYTABLE_B where X=${value};
     DELETE FROM DUMMYTABLE_C where X=${value};
    

    MS-SQL의 예 :

     DELETE FROM DUMMYTABLE_A where X=${value}
     GO
     DELETE FROM DUMMYTABLE_B where X=${value}
     GO
     DELETE FROM DUMMYTABLE_C where X=${value}
    

    더 나은 데이터베이스 (예.하지 MySQL은) 또한 TRAN / ROLLBACK TRAN을 COMMIT / TRAN을 BEGIN와의 거래를 지원합니다. 당신은 그것의 일부가 실패 할 경우, 세 다시 압연 될 하나의 원자 조작으로 모든 문은 실제로 일괄 거래를 할 수 있습니다 사용. 이들에 대한 몇 가지 자세한 내용은 http://www.sqlteam.com/article/introduction-to-transactions를 참조하십시오.

    가능성이 모두 당신이 필요로하는 대부분의 SQL 문하지만 사이의 세미콜론입니다!

  2. ==============================

    2.나는 오라클과 MyBatis로 사용하고 있습니다. 나는 다른 DB에서 비슷한 일이있을 것 같아요. 프로젝트를 지원해야 할 때 실제로 당신은 항상, 일반적으로 미래를위한 더 나은 DB, 절차를 만들 수 있습니다.

    나는 오라클과 MyBatis로 사용하고 있습니다. 나는 다른 DB에서 비슷한 일이있을 것 같아요. 프로젝트를 지원해야 할 때 실제로 당신은 항상, 일반적으로 미래를위한 더 나은 DB, 절차를 만들 수 있습니다.

    <delete id="deleteUnfinishedData" parameterType="map">
        {call
            declare
            begin
                delete from TABLE1 where id = #{valueFromMap1};
                delete from TABLE2 where id = #{valueFromMap2};
            end
        }
    </delete>
    
  3. ==============================

    3.사람이 오류 등을 가지고있는 경우

    사람이 오류 등을 가지고있는 경우

    당신은 당신의 드라이버에서 멀티 쿼리를 허용함으로써이 문제를 해결할 수 있습니다. mariadb 위해 그것은 MySQL은 같은 것

    allowMultiQueries = TRUE

    MyBatis로 문제를 다음에 설명 https://github.com/mybatis/mybatis-3/issues/1497

  4. from https://stackoverflow.com/questions/7174225/mybatis-executing-multiple-sql-statements-in-one-go-is-that-possible by cc-by-sa and MIT license