我们是否可以简单地复制数据库中的条目,而不必提及该行将被复制的所有字段名称。复制数据库行的ID为
我有一个排,看起来像
id name last city state whatever
1 joe doe xyz NY yyy
我想作一个副本。 id
是自动增量。什么是最简单的方法来做到这一点。
我们是否可以简单地复制数据库中的条目,而不必提及该行将被复制的所有字段名称。复制数据库行的ID为
我有一个排,看起来像
id name last city state whatever
1 joe doe xyz NY yyy
我想作一个副本。 id
是自动增量。什么是最简单的方法来做到这一点。
在@Adam温格的回答您的意见,我只想读一个查询中的所有字段,然后建立一个新的查询跳过id
领域。
喜欢的东西:
SELECT * FROM table_name WHERE id=some_id
PHP:
$sql = "INSERT INTO table_name SET ";
$first = true;
foreach ($row as $key => $value)
{
if ($key != 'id')
{
if ($first)
{
$first = false;
}
else
{
$sql .= ", ";
}
$sql .= '`' . $key . "`='" . $value . "'";
}
}
// run query
顺便说一句,我会产生PDO两个查询一份声明,这样我就不必担心逃避数据。
谢谢。这对我有用。 – Pinkie
最明确的方式来显示你正在做的事情是明确命名的列了。这将确保你得到你想要的功能,以及是明确的人谁拥有你以后要修改这个代码。
INSERT INTO yourTable(name, last, city, state, whatever)
SELECT name, last, city, state, whatever
FROM yourTable
WHERE id = 1
如果你真的想要做的插入记录动态由于未知的领域,你将需要使用动态SQL和数据INFORMATION_SCHEMA.COLUMNS,建立字段名自己在一个循环中,或类似的结构。
如果你不想列出您有与INFORMATION_SCHEMA和准备好的发言播放所有领域。
这是一个例子
set @str = (select concat('insert into ', table_name,' (', group_concat(column_name),')',' select ',group_concat(column_name),' from ', table_name, ' where id = 1') from
information_schema.columns
where table_schema = 'your_db' and table_name = 'your_table'
and column_key <> 'PRI');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;
你可以将它转换,即使在存储过程中传递给它三个参数(ID,表名和数据库名称)以这种方式:基于
delimiter //
drop procedure if exists copy_record //
create procedure copy_record(in my_id int, in my_db varchar(50), in my_table varchar(50))
begin
set @str = (select concat('insert into ', table_name,' (', group_concat(column_name),')',' select ',group_concat(column_name),' from ', table_name, ' where id = ',my_id) from
information_schema.columns
where table_schema = my_db and table_name = my_table
and column_key <> 'PRI');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;
end; //
delimiter ;
call copy_record(1,'db_name','table_name');
谢谢。 +1 .. – Pinkie
我也喜欢用不同的方式。在保安措施,其中MySQL数据库用户帐户不具有DROP权限情况:
SELECT `col1`, `col2`, `col3` FROM `table`
认沽结果到一个数组,然后将数组到数据库中。如果您想修改名称以包含 - 复制后也有帮助。
INSERT INTO `table` (`col1`, `col2`, `col3`) VALUES (?,?,?)
占位符可以是变量数组访问器($ name - 其中$ name = $ array [0])。这可能是多个步骤,但在复制的情况下,您很可能会复制单个行。如果有多行,它可能是一个较慢的过程,然后另一个答案。
请详细说明你想怎么做? SQL,PHP页面,EXE,夜间工作等。 – Robert
PHP,我有我的标签 – Pinkie
请参阅:http:// stackoverflow。com/questions/729489/duplicate-copy-records-in-the-same-mysql-table –