假设我们有一个名为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)备份数据库并打开文件时,您实际上可以查看每个插入以重新创建包含所有行的表那个时间点......
答案 0 :(得分:2)
没有这样的“命令”(存储数据,但不存储插入它的实际SQL),并且执行您要求的内容是没有意义的。您是否意识到您的“日志”将比实际的表和数据本身大20倍(至少)?并且无论如何都无法检索INSERT语句而无需进行大量工作(请参阅下面的注释)。
研究事务性SQL,利用服务器日志记录和事务,并按照您的预期定期备份数据并退出尝试重新发明轮子。 : - )
答案 1 :(得分:0)
没有这样的命令来检索原始的insert语句。但是,您始终可以根据现有的表结构和数据重新生成insert语句。
以下链接可能会对您有所帮助:
Get Insert Statement for existing row in MySQL
另一种可能的选择是使用带有php的mysqldump将数据导出为SQL语句。