it-swarm-ko.tech

MySql-잘리지 않는 경우 테이블 만들기?

업데이트 된 질문은 다음과 같습니다.

현재 쿼리는 다음과 같은 작업을 수행합니다.

$sql1 = "TRUNCATE TABLE fubar";
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";

이를 포함하는 메소드가 처음 실행될 때 테이블이 존재하지 않기 때문에 잘림에 대한 오류 메시지가 생성됩니다.

CREATE TABLE, TRUNCATE TABLE 그리고 테이블을 채우시겠습니까? (3 개의 별도 쿼리)

원래 질문은 :

블록 SQL을 작성하지 않고 MySql에서 다음이 가능한지 알아 내려는 데 어려움을 겪었습니다.

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

테이블 작성 전에 별도로 자르기를 실행하고 테이블이 존재하지 않으면 오류 메시지가 표시됩니다. 더 이상 쿼리를 추가하지 않고도 해당 오류 메시지를 제거하려고합니다.

이 코드는 PHP를 사용하여 실행됩니다.

21
shmuel613

shmuel613, 답장보다는 원래 질문을 업데이트하는 것이 좋습니다. 토론에 문제를 퍼 뜨리지 않고 완전한 질문이 포함 된 단일 장소가있는 것이 가장 좋습니다.

벤의 대답은 자신이 원하지 않는 곳에 '하지 않은 것'이있는 것 외에는 합리적입니다. does n't 존재하는 경우에만 테이블을 삭제하는 것이 옳지 않습니다.

실제로 여러 진술이 필요합니다. 조건부로 만든 다음 채우십시오.

  1. Fubar가없는 경우 임시 테이블 작성 (id int, name varchar (80))
  2. TRUNCATE TABLE 푸바
  3. Fubar에 삽입 * SELECT

아니면 그냥 삭제하고 다시 만드십시오

  1. 드롭 테이블이있는 경우 드롭 테이블
  2. 임시 테이블 생성 fubar SELECT id, name from barfu

순수한 SQL을 사용하면 두 가지 실제 솔루션 클래스가됩니다. 나는 두 번째가 더 좋습니다.

(저장 프로 시저를 사용하면 단일 문으로 줄일 수 있습니다. TruncateAndPopulate (fubar) 그러나 TruncateAndPopulate ()에 대한 코드를 작성할 때까지 위의 SQL을 사용하는 것보다 더 많은 시간을 소비하게됩니다.)

23
mdahlman

테이블이 있으면 쿼리를 실행하십시오.

사용법 : call Edit_table(database-name,table-name,query-string);

  • 프로시 저는 database-name 아래에 table-name이 있는지 확인하고 query-string이 있으면 실행합니다. 다음은 저장 프로 시저입니다.
DELIMITER $$

DROP PROCEDURE IF EXISTS `Edit_table` $$
CREATE PROCEDURE `Edit_table` (in_db_nm varchar(20), in_tbl_nm varchar(20), in_your_query varchar(200))
DETERMINISTIC
BEGIN

DECLARE var_table_count INT;

select count(*) INTO @var_table_count from information_schema.TABLES where TABLE_NAME=in_tbl_nm and TABLE_SCHEMA=in_db_nm;
IF (@var_table_count > 0) THEN
  SET @in_your_query = in_your_query;
  #SELECT @in_your_query;
  PREPARE my_query FROM @in_your_query;
  EXECUTE my_query;

ELSE
  select "Table Not Found";
END IF;

END $$
DELIMITER ;

Mysql에 대한 추가 정보

3
kedar

'존재하지 않는 경우 작성'후에 절단을 수행 할 수 있습니다. 그렇게하면 항상 존재하며 그 시점에서 항상 비어 있습니다.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar
3
Mark Janssen

어때요?

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

아니면 하나의 쿼리로 수행하고 싶습니까?

2
Ben

그렇다면 나쁘지 않습니다. 보다 구체적으로 말하면 현재 쿼리는 다음과 같은 작업을 수행합니다.

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "CREATE TEMPORARY TABLE이 존재하지 않으면 fubar SELECT id, name FROM barfu"; 

이를 포함하는 메소드가 처음 실행될 때 테이블이 존재하지 않기 때문에 잘림에 대한 오류 메시지가 생성됩니다.

"CREATE TABLE"을 수행하고 "TRUNCATE TABLE"을 실행 한 다음 테이블을 채우는 유일한 옵션입니까? (3 개의 별도 쿼리)

PS-너무 빨리 응답 해 주셔서 감사합니다!

0
shmuel613

PHP를 사용하는 경우 mysql_list_tables 를 사용하여 테이블을 잘라 내기 전에 테이블이 있는지 확인하십시오.

0
Lastnico