MYSQL使用AUTO_INCREMENT id字段将行复制到另一个相同的表

时间:2012-05-25 03:41:58

标签: mysql sql primary-key row auto-increment

我有一个电影数据库,其中电影插入名为titles的表中,其中一个名为titles_id的AUTO_INCREMENT主键。用户可以匿名提交电影,这些电影会插入名为titles_anon的单独相同表格中。在查看titles_anon中的条目后,我想将它们插入到标题中,但是id列导致了问题

我试过了:

  

INSERT INTO titles SELECT * FROM titles_anon WHERE   的title_id = '$的title_id';

我得到一个重复的键错误,或者如果title_id不存在于标题中它插入OK但是使用titles_anon id而不是我想要的新AUTO_INCREMENT值。

当两个表都有AUTO_INCREMENT主键时,如何在表之间复制行?

5 个答案:

答案 0 :(得分:2)

INSERT INTO titles 
(column_name1, column_name2, column_name3, column_name4,...)
SELECT title_id, col2, col3, col4,..
FROM titles_anon
WHERE title_id = '$title_id';

答案 1 :(得分:0)

您可以完全省略id列,让mysql为您生成它。这需要更长的SQL来指定要插入的确切列。

INSERT INTO titles (columns-other-than-the-primary-key) 
    SELECT columns-of-the-same-order FROM titles_anon

答案 2 :(得分:0)

您可以在SELECT中定义字段,但省略PK并将相同的字段添加到INSERT!

答案 3 :(得分:0)

在PHP中,你可以做类似的事情:

$rs = mysql_query("select * from table_orig where RowID=$IDToCopy",$db_conn);
 $row = mysql_fetch_assoc($rs);
 $sql = '';
 $fields = '';
 foreach($row as $k => $v){
  if($k == "RowID") continue;
  $sql .= ",'$v'";
  $fields .= ",$k";
 }
 $sql = "insert into table_copy (".substr($fields,1).") values (".substr($sql,1).")";
 mysql_query($sql,$db_conn);

答案 4 :(得分:0)

  

/ *将主键复制到另一个表* /

     

$ table_old = 'colaboradores'; //你的桌子旧

     

$ table_new = 'colaboradores2'; //你的桌子新

     

// sql所有列都带有主键(column_key<>'pri'

     

$ rs = mysql_query(“从INFORMATION_SCHEMA.COLUMNS中选择column_name   table_name ='$ table_old'和column_key<> 'pri'和   table_schema ='你的数据库'“);

     

//获取所有列

     

$ rows = mysql_fetch_assoc($ rs);

     

$ fields ='';

     

//在行中装载字段
  foreach($行为$ k => $ v){
        $ fields。=“,$ v [0]”;
  }

     

//删除第一个逗号
  $ fields = substr($ fields,1);

     

回显“Sintaxe for Mysql中的创建表”;
  echo“CREATE TABLE $ table_new SELECT $ fields FROM $ table_old”;
  echo“Sintaxe for insert from old table to new table Mysql”;
  echo“INSERT INTO $ table_new $ fields SELECT $ fields FROM $ table_old”;