2014-07-22 1 views
-1

나는 벽에 부딪 히면서 mysql information_schema 업데이트가 실행되는 것에 대해 궁금합니다.MYSQL 어떤 information_schema 데이터 업데이트를 트리거합니까?

제 목표는 테이블 생성 시간을 읽고 그 데이터를 사용자에게 제시하는 것입니다. 그러나 PHP에서 두 개의 MySQL 쿼리를 실행하면 information_schema가 생성 시간을 변경하지 않습니다. 예를 들면 : 나는 하나의 PHP 스크립트에서 테이블을 삭제하는 경우

///drop local table 
$delete_sql="DROP TABLE IF EXISTS bom_details;"; 
if(mysql_query($delete_sql)){ 
    //good 
} 
//re-create table to update schema timestamp 
    $create_table_sql="CREATE TABLE IF NOT EXISTS bom_details (
    bom_id int(4) NOT NULL AUTO_INCREMENT, 
    part_number varchar(86) NOT NULL, 
    component_part_number varchar(86) NOT NULL, 
    component_level int(2) NOT NULL COMMENT 'line number defination for parts with multiple sub-components', 
    component_qty decimal(10,4) NOT NULL, 
    component_um varchar(4) NOT NULL, 
    PRIMARY KEY (bom_id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;"; 
if(mysql_query($create_table_sql)) { 
    //worked 
} 

그러나, 다음 같은 코드가 나는 새로운 창조의 시간을 얻을, 위의 게시하여 다른 PHP 스크립트에서 테이블을 다시 만들 수 있습니다. 또는 phpMyAdmin에 테이블을 놓고 sql create query를 실행하면 새로운 테이블 생성 시간이 생깁니다.

내가 시도한 또 다른 유일한 일은 mySQL에 테이블을 다시 작성하기 전에 DROP를 등록하는 데 몇 초가 걸리는 PHP 스크립트에 슬립 타이머를 넣는 것 뿐이며 운이 없다.

+1

[** 새 코드 **] (http://bit.ly/phpmsql)에는 mysql_ * 함수를 사용하지 마십시오. 그들은 더 이상 유지되지 않으며 [공식적으로 사용되지 않습니다] (http://j.mp/XqV7Lp). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). – esqew

+0

시간 생성 값은 어떻게 확인합니까? '@didierc – didierc

+0

/// 최신 업데이트 표 시간 정보 스키마 \t \t $의 SQL =에서 "\t \t \t \t INFORMATION_SCHEMA.TABLES 로부터 CREATE_TIME을 선택 받기 WHERE TABLE_SCHEMA = 'part_location' \t \t \t \t AND TABLE_NAME = 'bom_details' "; \t \t $ query = mysql_query ($ sql); \t \t \t \t 동안 (= $ 행로 MYSQL_ASSOC ($ 쿼리)) { \t \t \t $ bom_create_time = $ 행 [ 'CREATE_TIME']; \t \t} \t \t echo '최종 업데이트
'. 날짜 ('M j Y g : i A', strtotime ($ bom_create_time));' – nodsdorf

답변

0

많은 연구와 시행 착오 끝에. 문제는 mySQL 데이터베이스 엔진에서 발생했습니다.

테이블을 삭제 (DROP)하면 삭제되는 경우가 많으므로 정보 스키마의 메타 데이터를 새로 만들면 매우 간단 해 보입니다.

단지 ENGINE 옵션을 InnoDB에서 MyISAM으로 변경하면됩니다.

다음은 완벽한 해결책입니다.

///drop local table 
    $delete_sql="DROP TABLE IF EXISTS bom_details;"; 
    if(mysql_query($delete_sql)){ 
     //good 
    } 


    //re-create table to update schema timestamp 
     $create_table_sql="CREATE TABLE IF NOT EXISTS bom_details (
     bom_id int(4) NOT NULL AUTO_INCREMENT, 
     part_number varchar(86) NOT NULL, 
     component_part_number varchar(86) NOT NULL, 
     component_level int(2) NOT NULL COMMENT 'line number defination for parts with multiple sub-components', 
     component_qty decimal(10,4) NOT NULL, 
     component_um varchar(4) NOT NULL, 
     PRIMARY KEY (bom_id) 
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;"; 
    if(mysql_query($create_table_sql)) { 
     //worked 
    } 

///Get Last Update Table Time From Information Schema 
    $sql="SELECT create_time FROM INFORMATION_SCHEMA.TABLES 
     WHERE table_schema = 'part_location' 
     AND table_name = 'bom_details'"; 
    $query=mysql_query($sql);  
     while($row=mysql_fetch_array($query)) { 
     $bom_create_time=$row['create_time']; 
    } 


      echo 'Last Update<br>'. date('M j Y g:i A', strtotime($bom_create_time)); 
관련 문제