programing

테이블이 있는 경우 드롭 테이블을 만들고, 없는 경우 테이블만 만듭니다.

projobs 2023. 2. 3. 21:14
반응형

테이블이 있는 경우 드롭 테이블을 만들고, 없는 경우 테이블만 만듭니다.

어떻게 해야 할지 모르겠어요.

기본적으로 테이블을 만들고 싶은데 테이블이 있는 경우 삭제한 후 다시 생성해야 합니다.절단이 아니라 테이블이 없는 경우 생성하기만 하면 됩니다.

누구 도와줄 사람 있어요?

그냥 넣어주세요DROP TABLE IF EXISTS `tablename`;전에CREATE TABLE진술.

이 문은 테이블이 존재하는 경우 테이블을 드롭하지만 존재하지 않는 경우 오류를 발생시키지 않습니다.

그냥 사용하다DROP TABLE IF EXISTS:

DROP TABLE IF EXISTS `foo`;
CREATE TABLE `foo` ( ... );

다른 문제가 있으면 먼저 MySQL 문서를 검색해 보십시오.

음... 응.몇 년 동안 아무도 한 가지 미묘한 것을 언급하지 않았다.

불구하고DROP TABLE IF EXISTS `bla`; CREATE TABLE `bla` ( ... );타당하다고 생각되므로 오래된 테이블이 이미 없어지고 새로운 테이블이 아직 작성되지 않은 상황이 발생합니다.현시점에서 일부 클라이언트는 제목 테이블에 접속하려고 할 수 있습니다.

보다 좋은 방법은 완전히 새로운 테이블을 생성하여 이전 테이블과 교환하는 것입니다(테이블의 내용이 손실됩니다).

CREATE TABLE `bla__new` (id int); /* if not ok: terminate, report error */
RENAME TABLE `bla__new` to `bla`; /* if ok: terminate, report success */
RENAME TABLE `bla` to `bla__old`, `bla__new` to `bla`;
DROP TABLE IF EXISTS `bla__old`;
  • 결과를 확인해야 합니다.CREATE ...또, 에러가 발생했을 경우는 속행하지 말아 주세요.실패는 다른 스레드가 같은 스크립트를 완료하지 않았다는 것을 의미하기 때문입니다.중간에 크래쉬 하거나 아직 완료하지 않았거나 둘 중 하나입니다.직접 검사하는 것이 좋습니다.
  • 그러면 먼저 결과를 확인해야 합니다.RENAME ...성공했을 경우는 속행하지 말아 주세요.전체 조작이 정상적으로 완료되어 있습니다.더구나 다음 조작을 실행하고 있습니다.RENAME ...다른 스레드가 이미 동일한 시퀀스를 시작한 경우 안전하지 않을 수 있습니다(아래 잠금 참고 참조).
  • 둘째RENAME ...테이블 정의를 atomically 치환합니다.자세한 내용은 MySQL 매뉴얼을 참조하십시오.
  • 드디어,DROP ...오래된 테이블만 치우면 돼

모든 문장을 다음과 같은 것으로 마무리합니다.SELECT GET_LOCK('__upgrade', -1); ... DO RELEASE_LOCK('__upgrade');에러 체크 없이 모든 스테이트먼트를 순차적으로 기동할 수 있지만, 이것은 좋은 생각이 아니라고 생각합니다.MySQL의 복잡성이 증가하고 잠금 기능이 스테이트먼트 베이스의 레플리케이션에 안전하지 않습니다.

테이블 데이터가 테이블 정의 업그레이드에서 존속해야 하는 경우...일반적인 경우 테이블 정의를 비교하여 차이를 찾아내고 적절한 결과를 도출하는 것은 훨씬 더 복잡한 이야기입니다.ALTER ...문 - 예를 들어 열 이름을 변경할 때 항상 자동으로 사용할 수 있는 것은 아닙니다.

Side Note 1: 이 경우 동일한 접근방식을 사용하여 뷰를 처리할 수 있습니다.CREATE/DROP TABLE 변모하다CREATE/DROP VIEW 동시에RENAME TABLE변경되지 않습니다.실제로 테이블을 보기로 전환할 수도 있고 반대로도 가능합니다.

CREATE VIEW `foo__new` as ...; /* if not ok: terminate, report error */
RENAME TABLE `foo__new` to `foo`; /* if ok: terminate, report success */
RENAME TABLE `foo` to `foo__old`, `foo__new` to `foo`;
DROP VIEW IF EXISTS `foo__old`;

사이드 노트 2: MariaDB 사용자는 다음 사항에 만족해야 합니다.CREATE OR REPLACE TABLE/VIEW그것은 이미 주제 문제에 관심을 가지고 있고, 그것은 좋은 점들이다.

테이블을 삭제하고 뷰에서 데이터를 사용하여 다시 생성해야 했습니다.뷰에서 테이블을 만들고 있었는데 다음과 같이 했습니다.

DROP TABLE <table_name>;
CREATE TABLE <table_name> AS SELECT * FROM <view>;

MySQL MariaDb를 사용하여 위와 같은 작업을 수행하였습니다.

언급URL : https://stackoverflow.com/questions/20155989/if-table-exists-drop-table-then-create-it-if-it-does-not-exist-just-create-it

반응형