2012-10-16 61 views
7

可能重复:
Get Insert Statement for existing row in MySQL如何从数据库中获取原始插入语句

假设我们有一个表叫做用户:

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,并希望更新/删除行可以在时间点回滚...因此,我需要重新从表中确切插入查询数据(我已经搜索了所有的网络上的答案,并可以' t找到它...)

是否有一个查询会自动返回通过主键插入特定行的查询?

我要寻找的查询将做到这一点:

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),你打开文件,你可以实际查看每个插入重新创建与该时间点的所有行的表...

+0

PhpMyAdmin只是手动将数据库导出为SQL格式。我相信你所寻找的命令没有任何附近。但是,您可能会发现很好的脚本,以便像PhpMyAdmin一样从表结构和数据生成插入语句。 –

+0

我相当确定没有这样的命令,但它不会花太多的时间写在PHP! – Erik

+0

您是否需要按照它们最初的相同顺序返回INSERT语句?或者是否有任何有效的INSERT语句集合足够好?如果后者,'mysqldump'应该做你想要的。 – Barmar

回答

0

有没有这样的命令检索原始插入语句。但是,您总是可以根据现有的表结构和数据重新制作插入语句。

以下链接可以帮助你,在这个已经被问:

Get Insert Statement for existing row in MySQL

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

+0

二进制日志呢? –

+0

您始终可以将二进制数据转换为base64字符串。 insert语句将包含base64字符串以及将其转换回二进制文件的脚本。 –

2

没有这样的“命令”(数据被存储,但不是插入它的实际SQL),并且执行你所要求的操作是没有意义的。你知道你的“日志”会比实际的表和数据本身大20倍(至少)吗?无论如何,如果没有大量的工作来追踪INSERT语句(见下面的注释),它将无法检索到INSERT语句。

研究事务性SQL,利用服务器日志记录和事务,并定期备份数据,就像你应该做的那样,并且不再尝试重新发明轮子。 :-)

+0

二进制日志呢? –

+0

@阿德里安:他们呢?如果你正确地使用它们(交易,备份等),它们是有用的(如**二进制日志**)。 “不要重新发明轮子”的哪一部分不清楚?如果你正在做的事情正确,没有必要'mysqlbinlog'任何东西。我是否应该因为推荐使用应该用于不适当的紧急恢复的内容而降低您的答案? –

+0

我的观点是反对'没有这样的'命令''。我想OP是在寻找一个审计日志 - 当没有一个时 - 这会起作用 –

相关问题