使用MySQL,我可以运行查询:
SHOW CREATE TABLE MyTable;
它将返回指定表的create table语句。如果您已经创建了一个表,并且想要在另一个数据库上创建相同的表,这将非常有用。
是否可以为已经存在的行或行集获取insert语句?有些表有很多列,如果能够让insert语句将行转移到另一个数据库,而不必写出insert语句,或者不将数据导出到CSV,然后再将相同的数据导入另一个数据库,那就太好了。
只是为了澄清一下,我想要的是像这样工作的东西:
SHOW INSERT Select * FROM MyTable WHERE ID = 10;
并为我返回以下内容:
INSERT INTO MyTable(ID,Col1,Col2,Col3) VALUES (10,'hello world','some value','2010-10-20');
发布于 2012-07-12 00:26:39
我写了一个php函数来做这件事。我需要编写一条insert语句,以防在删除历史表后需要替换记录:
function makeRecoverySQL($table, $id)
{
// get the record
$selectSQL = "SELECT * FROM `" . $table . "` WHERE `id` = " . $id . ';';
$result = mysql_query($selectSQL, $YourDbHandle);
$row = mysql_fetch_assoc($result);
$insertSQL = "INSERT INTO `" . $table . "` SET ";
foreach ($row as $field => $value) {
$insertSQL .= " `" . $field . "` = '" . $value . "', ";
}
$insertSQL = trim($insertSQL, ", ");
return $insertSQL;
}
发布于 2012-11-10 01:51:22
Laptop Lift的代码运行良好,但我认为人们可能会喜欢一些东西。
数据库处理程序是参数,而不是硬编码的。使用了新的mysql api。为灵活起见,将$id替换为可选的$where参数。如果有人曾经尝试过sql注入,并避免涉及引号的简单中断,则使用real_escape_string。使用INSERT table (field...) VALUES (value...)...
语法,这样字段只定义一次,然后只列出每一行的值(内爆非常棒)。因为Nigel Johnson指出了这一点,所以我添加了NULL
处理。
我使用$array[$key]
是因为我担心它会以某种方式改变,但除非有什么可怕的错误,否则它无论如何都不应该改变。
<?php
function show_inserts($mysqli,$table, $where=null) {
$sql="SELECT * FROM `{$table}`".(is_null($where) ? "" : " WHERE ".$where).";";
$result=$mysqli->query($sql);
$fields=array();
foreach ($result->fetch_fields() as $key=>$value) {
$fields[$key]="`{$value->name}`";
}
$values=array();
while ($row=$result->fetch_row()) {
$temp=array();
foreach ($row as $key=>$value) {
$temp[$key]=($value===null ? 'NULL' : "'".$mysqli->real_escape_string($value)."'");
}
$values[]="(".implode(",",$temp).")";
}
$num=$result->num_rows;
return "INSERT `{$table}` (".implode(",",$fields).") VALUES \n".implode(",\n",$values).";";
}
?>
发布于 2010-10-23 00:47:05
我使用程序SQLYOG,在这里我可以执行select查询,指向
结果,然后选择导出为sql。这给了我insert语句。
https://stackoverflow.com/questions/3978326
复制相似问题