[SQL] 그것은 주요 SQL 데이터베이스의 테이블 및 ALTER 표 문을 CREATE 롤백 할 수 있습니까?
SQL그것은 주요 SQL 데이터베이스의 테이블 및 ALTER 표 문을 CREATE 롤백 할 수 있습니까?
나는 문제가 DDL하는 프로그램에서 일하고 있습니다. 나도 여부 표를 만드시겠습니까과 유사한 DDL은에서 롤백 할 수 있습니다
각 데이터베이스가 DDL과의 거래를 처리하는 방법에 대해 설명합니다.
해결법
-
==============================
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.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.그것은 엄격하게 "롤백"를 말하는 것은 아니지만, 오라클 플래시백 명령은 데이터베이스를 지원하도록 구성되어있는 경우, 이러한 유형의 변경을 취소 할 수 있습니다.
그것은 엄격하게 "롤백"를 말하는 것은 아니지만, 오라클 플래시백 명령은 데이터베이스를 지원하도록 구성되어있는 경우, 이러한 유형의 변경을 취소 할 수 있습니다.
-
==============================
4.다른 답변처럼 보이는 꽤 오래된 있습니다.
다른 답변처럼 보이는 꽤 오래된 있습니다.
2019의로 :
-
==============================
5.MySQL과 연동하여 할 수없는 그것을 (허용 대답에 따라) ... 아주 바보 같은,하지만 진정한 보인다
MySQL과 연동하여 할 수없는 그것을 (허용 대답에 따라) ... 아주 바보 같은,하지만 진정한 보인다
https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
몇 가지 방법을 시도하고 단순히 롤백되지 않습니다 ..
해결책은 간단하게 실패 플래그를 설정하고 쿼리 중 하나가 실패 할 경우 "드롭 테이블 tblname"을하는 것입니다 ..
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
'SQL' 카테고리의 다른 글
[SQL] 어떻게 GROUP BY 작동합니까? (0) | 2020.03.30 |
---|---|
[SQL] 내부의 성능은 가입 교차 비교 조인 (0) | 2020.03.30 |
[SQL] SQL에서의 나쁜 성능을 위해인가? (0) | 2020.03.29 |
[SQL] SQL 성능 UNION 대 또는 (0) | 2020.03.29 |
[SQL] SQL 데이터베이스에서 단순 무작위 샘플 (0) | 2020.03.29 |