7

重複の可能性:
MySQL の既存の行の挿入ステートメントを取得する

users というテーブルがあるとします。

CREATE TABLE IF NOT EXISTS users(
UID int(11) PRIMARY KEY NOT NULL auto_increment,
fname varchar(100) default NULL,
lname varchar(100) default NULL,
username varchar(20) default NULL UNIQUE,
password blob   
)ENGINE=InnoDB DEFAULT CHARSET=utf8

テーブルにいくつかの行が入力されていると仮定しましょう。テーブルの作成を返すクエリがあることは知っています-> SHOW CREATE TABLE usersしかし、個々の挿入ステートメントを再作成してログに保存しようとしています...これは奇妙に聞こえることはわかっていますが、カスタムを作成していますすべてがログに記録され、できれば更新/削除された行が特定の時点でロールバックできるCMS...したがって、テーブルデータから正確な挿入クエリを再作成する必要があります(Web全体で回答を検索しましたが、見つかりませんそれ...)

その特定の行を主キーで挿入したクエリを「自動的に」返すクエリはありますか?

これを行うクエリを探しています:

SHOW INSERT FROM users WHERE PRIMARY_KEY=2

戻り値:

INSERT INTO users (UID,fname,lname,username,password) VALUES (2,'somename','somelastname','someusername','someAESencryptedPassword')

私がそのようなクエリが存在する/可能であると考えている理由は、php myadmin (cpanel) を使用してデータベースをバックアップし、ファイルを開くと、実際に各挿入を表示して、そのポイント内のすべての行でテーブルを再作成できるためです。時間...

4

2 に答える 2

2

そのような「コマンド」は存在せず (データは保存されますが、それを挿入した実際の SQL は保存されません)、求めていることを実行しても意味がありません。「ログ」が実際のテーブルとデータ自体よりも (少なくとも) 約 20 倍大きくなることに気付きましたか? とにかく、追跡するために多くの作業を行わなければ、INSERT ステートメントを取得することはできません (以下のコメントを参照してください)。

トランザクション SQL を研究し、サーバー ロギングとトランザクションを利用し、データを定期的にバックアップして、車輪の再発明をやめます。:-)

于 2012-10-16T01:59:45.400 に答える
0

元の挿入ステートメントを取得するコマンドはありません。ただし、既存のテーブル構造とデータに基づいて挿入ステートメントをいつでも作り直すことができます。

すでに質問されている場合、次のリンクが役立つ場合があります。

MySQL の既存の行の Insert ステートメントを取得する

別の可能なオプションは、php でmysqldumpを使用して、データを SQL ステートメントとしてエクスポートすることです。

于 2012-10-16T01:48:45.167 に答える