我們是否可以簡單地複製數據庫中的條目,而不必提及該行將被複制的所有字段名稱。複製數據庫行的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 –