如何从数据库中获取原始插入语句

时间:2012-10-16 01:34:08

标签: php mysql return-value

  

可能重复:
  Get Insert Statement for existing row in 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用户 但我想重新创建单独的插入语句以将它们保存在日志中...我知道这听起来很奇怪,但我正在制作一个自定义的CMS,其中记录了所有内容,并希望更新/删除的行可以在时间点回滚...因此我需要从表格数据中重新创建精确的插入查询(我已经在网上搜索了一个答案而无法找到它...)

是否有查询会“自动”返回按主键插入该特定行的查询?

我正在寻找一个可以执行此操作的查询:

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)备份数据库并打开文件时,您实际上可以查看每个插入以重新创建包含所有行的表那个时间点......

2 个答案:

答案 0 :(得分:2)

没有这样的“命令”(存储数据,但不存储插入它的实际SQL),并且执行您要求的内容是没有意义的。您是否意识到您的“日志”将比实际的表和数据本身大20倍(至少)?并且无论如何都无法检索INSERT语句而无需进行大量工作(请参阅下面的注释)。

研究事务性SQL,利用服务器日志记录和事务,并按照您的预期定期备份数据并退出尝试重新发明轮子。 : - )

答案 1 :(得分:0)

没有这样的命令来检索原始的insert语句。但是,您始终可以根据现有的表结构和数据重新生成insert语句。

以下链接可能会对您有所帮助:

Get Insert Statement for existing row in MySQL

另一种可能的选择是使用带有php的mysqldump将数据导出为SQL语句。