복붙노트

[SQL] 그것은 주요 SQL 데이터베이스의 테이블 및 ALTER 표 문을 CREATE 롤백 할 수 있습니까?

SQL

그것은 주요 SQL 데이터베이스의 테이블 및 ALTER 표 문을 CREATE 롤백 할 수 있습니까?

나는 문제가 DDL하는 프로그램에서 일하고 있습니다. 나도 여부 표를 만드시겠습니까과 유사한 DDL은에서 롤백 할 수 있습니다

각 데이터베이스가 DDL과의 거래를 처리하는 방법에 대해 설명합니다.

해결법

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

    1.http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis는 PostgreSQL의 관점에서이 문제에 대한 개요를 제공합니다.

    http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis는 PostgreSQL의 관점에서이 문제에 대한 개요를 제공합니다.

    이 문서에 따라인가 DDL 트랜잭션?

    SQLite는 또한뿐만 아니라 트랜잭션 DDL을 가지고 나타납니다. 내가 SQLite는에 CREATE TABLE 문을 롤백 할 수 있었다. 그것의 CREATE TABLE 문서는 특별한 거래 '개는'을 언급하지 않습니다.

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

    2.PostgreSQL는 대부분의 데이터베이스 오브젝트에 대한 트랜잭션 DDL (확실히 테이블, 인덱스 등이 아닌 데이터베이스 사용자)가 있습니다. 그러나 거의 모든 DDL은 DDL 트랜잭션이 완료 될 때까지 완전히 액세스 할 수 없게 만들고, 대상 객체에 대한 ACCESS EXCLUSIVE 잠금을 얻을 것이다. 다른 트랜잭션이 그것을 삭제하고 대체 테이블 foo는 생성되는 동안 테이블 foo를 선택하려고하면 또한, 모든 상황, 예를 들어 아주 handled- 있으며, 다음 차단 된 트랜잭션은 마지막으로 새로운 foo는 테이블을 찾는 것이 아니라 오류가 발생합니다. (편집 : 이것은 PostgreSQL의 9.3 이전에 수정되었습니다)

    PostgreSQL는 대부분의 데이터베이스 오브젝트에 대한 트랜잭션 DDL (확실히 테이블, 인덱스 등이 아닌 데이터베이스 사용자)가 있습니다. 그러나 거의 모든 DDL은 DDL 트랜잭션이 완료 될 때까지 완전히 액세스 할 수 없게 만들고, 대상 객체에 대한 ACCESS EXCLUSIVE 잠금을 얻을 것이다. 다른 트랜잭션이 그것을 삭제하고 대체 테이블 foo는 생성되는 동안 테이블 foo를 선택하려고하면 또한, 모든 상황, 예를 들어 아주 handled- 있으며, 다음 차단 된 트랜잭션은 마지막으로 새로운 foo는 테이블을 찾는 것이 아니라 오류가 발생합니다. (편집 : 이것은 PostgreSQL의 9.3 이전에 수정되었습니다)

    CONCURRENTLY 특별하다 ... INDEX를 생성, 그것은 동시 업데이트를 허용하면서 그 자체가 트랜잭션에서 수행 할 수 있도록 테이블에 인덱스를 추가하는 세 개의 트랜잭션을 사용합니다.

    또한 데이터베이스 유지 관리 명령 VACUUM는 트랜잭션에서 사용할 수 없습니다.

  3. ==============================

    3.그것은 엄격하게 "롤백"를 말하는 것은 아니지만, 오라클 플래시백 명령은 데이터베이스를 지원하도록 구성되어있는 경우, 이러한 유형의 변경을 취소 할 수 있습니다.

    그것은 엄격하게 "롤백"를 말하는 것은 아니지만, 오라클 플래시백 명령은 데이터베이스를 지원하도록 구성되어있는 경우, 이러한 유형의 변경을 취소 할 수 있습니다.

  4. ==============================

    4.다른 답변처럼 보이는 꽤 오래된 있습니다.

    다른 답변처럼 보이는 꽤 오래된 있습니다.

    2019의로 :

  5. ==============================

    5.MySQL과 연동하여 할 수없는 그것을 (허용 대답에 따라) ... 아주 바보 같은,하지만 진정한 보인다

    MySQL과 연동하여 할 수없는 그것을 (허용 대답에 따라) ... 아주 바보 같은,하지만 진정한 보인다

    https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

    몇 가지 방법을 시도하고 단순히 롤백되지 않습니다 ..

    해결책은 간단하게 실패 플래그를 설정하고 쿼리 중 하나가 실패 할 경우 "드롭 테이블 tblname"을하는 것입니다 ..

  6. from https://stackoverflow.com/questions/4692690/is-it-possible-to-roll-back-create-table-and-alter-table-statements-in-major-sql by cc-by-sa and MIT license