• 締切済み

テーブルの更新日時取得方法について

MySQLv5.1+InnoDBエンジンのDBで質問です。 テーブルの最終更新日時とかを取得して、一定時間更新の無いテーブルを 見つける仕組みを作ろうと考えています。 (OracleだとUSER_TABLESなどのLAST_DDL_TIMEを見たい) 既に、「SHOW TABLE STATUS で出てくる、Update_time の項目を見る」 は試してみたんですがNULLになっていて見られないです・・ (InnoDBはUpdate_timeに非対応?) 代替の方法など、もしあれば教えてください。 よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数2

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

テーブルのファイルの日時をシステムで拾うとか、 データごとにタイムスタンプを埋め込んでMAXを取るとか有効かもしれません

sutaburo
質問者

お礼

回答ありがとうございます。 確かにMAXを取る方法もアリですね。 検証する際、この方法も試してみます。

noname#129900
noname#129900
回答No.1

検証していないのですが、 テーブル更新日時用のテーブルを作成しておき、 あるテーブルが変更されたら、トリガで更新日時用テーブルを更新する というのはいかがでしょうか。

sutaburo
質問者

お礼

参考になる回答ありがとうございます。 性能面への影響も心配なので、何パターンかの実現方法で検証してみようかと思います。

関連するQ&A

  • ACCESS2003で、テーブルの更新日時を入れたいです。

    ACCESS で作成したDBのテーブル更新日時を、自動で入力されるようにしたいと思いますがどのようにしたらよいのでしょうか? テーブルの該当フィールドにある規定値に何かの式を入れれば良い気がするのですが、わかりません。 規定値を date()では、テーブルを新規作成したときだけの入力のようなので困っています。 よろしくお願いします。

  • 特定のフィールドが更新されたときだけ日時を更新する

    targetのデータが変わった・更新されたときに、update_dayをその日時に更新したいと考えています。 フィールドは、field_1, field_2, target, field_4, field_5, update_day, new_day ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー field_1=int型、primary key field_2=varchar型、 target=float型(7.3) field_4=boolean型 field_5=text型 update_day=timestamp型、NULL、 default CURRENT_TIMESTAMP、 on update CURRENT_TIMESTAMP new_day=timestamp型、NOT NULL、 default '0000-00-00 00:00:00' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー target以外のフィールドのデータが更新されたときにもupdate_dayが更新されてしまいます。 ■field_1, field_2, field_4, field_5 ■target, update_day, new_day とテーブルを分けるしか方法がありませんか??? ぐっちゃりしてしまうため極力テーブルを分けたくありません。

    • ベストアンサー
    • PHP
  • ロール付与したタイムスタンプの取得は可能ですか?

    「あるオブジェクトに対する権限付与はいつされたのか。」 という事を調べることはできないか悩んでいます。 DBはOracle9iR2です。 テーブルやINDEXですと、XXX_OBJECTSのCREATEDやLAST_DDL_TIME から取得可能であると理解しているのですが、 「権限付与はいつされたのか」という情報はどこから求めれば 良いのでしょうか? XXX_TAB_PRIVSにCREATEDというカラムがあると良いのですが 見当たりませんでした。 もしかして、そもそもそんな情報は取得できないのでしょうか? もしご存知の方いらっしゃれば情報提供お願いいたします。

  • DDLのインポート方法

    musqlコマンドを使って下記テキストファイルのddlをインポートしたいのですが、下記コマンドを使ってもうまく行きません。 やり方がわからなく四苦八苦しています。お分かりの方がいらっしゃいましたら、ご教示をお願いいたします。 mysqlimport wgu_ec wagokoro_db_goods.sql mysqlimport: Error: Table 'wgu_ec.wagokoro_db_goods' doesn't exist, when using table: wagokoro_db_goods textファイル(ファイル名:wagokoro_db_goods.sql)の内容は下記の通りです。 /*--------------新着商品詳細---------------------*/ use wgu_ec; drop table if exists `CMS_NEWITEM_DETAIL_TB`; CREATE TABLE `CMS_NEWITEM_DETAIL_TB` ( `new_item_detail_id` int(8) unsigned NOT NULL auto_increment COMMENT '新着商品明細id' , `new_item_id` int(4) NOT NULL DEFAULT '0' COMMENT '新着商品ID' , `goods_id` int(8) NOT NULL DEFAULT '0' COMMENT '商品id' , `color_id` int(2) NOT NULL DEFAULT '0' COMMENT '色id' , `del_f` tinyint(1) NOT NULL DEFAULT '0' COMMENT '削除フラグ 1:削除' , `insert_date` datetime 0000-00-00 00:00:00 NOT NULL COMMENT '登録日時' , `insert_app_no` varchar(32) NOT NULL COMMENT '登録アプリ名' , `update_date` datetime 0000-00-00 00:00:00 NOT NULL COMMENT '更新日時' , `update_app_no` varchar(32) NOT NULL COMMENT '更新アプリ名' , PRIMARY KEY ( `new_item_detail_id` ) ) type Innodb ;

    • ベストアンサー
    • MySQL
  • identityの値の変更/自動更新について

    MySQLからWindowAzureに移行しています。 1.identityが設定されている値の変更 auto_incrementが使えないようなので、identityを使用して下記のテーブルを作成しました。 ですが、identityだと更新ができないので困っています。 CREATE TABLE test ( id int NOT NULL identity, text nvarchar(255) NOT NULL, PRIMARY KEY (id), ); データの追加に関しては、IDENTITY_INSERTをONにすることでできますが、更新時はどうすればよいでしょうか? データの追加の場合は、使用の際上記のように、毎回ONにする必要がありますか?(DB接続時にONにしてしまえばよい/テーブル作成時に記述で可能ではない?) 複数個所から更新をするので、すべての箇所に記述するのは可能な限りしたくありません。 2.データの自動更新 テーブルを更新した際に、データを自動で更新したいのですが、mysqlでは on update で可能ですが、 SQLAzureでは、下記のSQLをどのように記述すればよいでしょうか? create table time( id int not null, time1 datetime NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY(id) ); よろしくお願いします。

  • DBをまたいで更新

    現在、testDB1とtestDB2というDBが存在します。 それで、testDB1のtable.idとtestDB2のtable2.idを SELECT文で比較して、同じidの場合はtestDB2のtable2.dataに 1という値を格納したいと思っています。 それで、DBをまたいで更新するときの記述が分からず ネットで検索したのですが、うまくヒットしませんでした。 そもそもDBをまたいで問い合わせや更新等はできないのでしょうか? できない場合、代替の方法があったら教えて頂けますでしょうか。 よろしくお願い致します。

  • ユーザーテーブルとシステムテーブルを区別したい

    カテゴリーが違ったらすみません。 VC++のプログラムで SQLTables,SQLBindCol関数を使ってDB上のテーブル名の一覧を取得しています。 この時、システムテーブル(例えば、AccessならMSys_...,Oracle9なら_ALL_INSTANTIATION_DDL等)も取得してしまいます。 ユーザーが生成したテーブルだけの一覧を作りたいので困っています。 ユーザーが生成したテーブルとシステムテーブルを区別する方法があったら教えて下さい。

  • MySQLに参照整合性制約を実装したテーブルを作成したい

    MySQL4.1.17に、 外部キーで関連付けたテーブルを作成したいのですが、 生成時にエラーが発生してしまいます。 <Error Message> 37000:[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 流しているDDLは以下のとおりです。 テーブル型は両方ともINNODBに設定しています。 どなたか原因がわかる方がいたら、ご教授いただけます でしょうか? よろしくお願いいたします。 CREATE TABLE Entity1( att1 CHAR(10) NOT NULL, PRIMARY KEY (att1) )TYPE=INNODB ; CREATE TABLE Entity2( att1 CHAR(10) NOT NULL, PRIMARY KEY (att1) )TYPE=INNODB ; CREATE INDEX FKEnt2 ON Entity2(att1) ; ALTER TABLE Entity2 ADD FOREIGN KEY (att1) REFERENCES Entity1(att1) ;

    • ベストアンサー
    • MySQL
  • アクセス テーブルデータ他のテーブルにコピーVBA

    win10 access365のmdbファイルにおいて table1のフィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  table2;フィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  上記に置いて table2の新しいデータとして table1のデータをコピーしたい、 ただしtable1には レコードは1行だけとします (table1にレコードが複数行ある場合の最新レコードだけtable2にコピーも出来れば知りたいです) アクセス付属の更新クエリーでは、どうも うまくいきません sqlにおいて UPDATE table1, table2 SET table2.ID = [table1]![ID], table2.氏名 = [table1]![氏名]; 上記動作しません Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim TB As Table Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Table![table1]![ID] Rdset![氏名] = Table![table1]![氏名] Rdset.Update End Function table1, table2を それぞれ 同名のフォームを作り Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim fm As Form Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set fm = Forms![table1] If Rdset.BOF Then Exit Function Else Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Forms![table1]![ID] Rdset![氏名] = Forms![table1]![氏名] Rdset.Update End If End Function いずれも table2のデータ更新が なされていません すみません 宜しくお願い致します

  • ACCESS2000で更新のあったテーブルの確認

    お世話になっております。 連続の投稿となり大変恐縮です。 他人が作成した、ACCESS2000+VBAのアプリケーションが あるのですが、更新の(Update、Insert等)あった テーブルを確認するにはどうしたら良いでしょうか? ACCESSの画面(多分データーベースオブジェクト)の 画面でのテーブルの「更新日時」はどうもテーブル に更新があっても新しくならないように見えます どなたか、教えて頂けるとありがたいです。