1

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

我试过这个:

插入标题选择 * FROMtitles_anon WHERE title_id='$title_id';

我要么收到重复键错误,要么如果 title_id 不存在于标题中,它会插入 OK,但使用 title_anon id 而不是我想要的新 AUTO_INCREMENT 值。

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

4

5 回答 5

3
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';
于 2012-05-25T03:47:11.727 回答
0

/* 复制带有主键的表到另一个表 */

$table_old='colaboradores'; // 你的表是旧的

$table_new='colaboradores2'; //你的新表

// sql 所有没有主键的列 (column_key <> 'pri'

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

// 获取所有列

$rows = mysql_fetch_assoc($rs);

$fields = '';

// 在行中挂载字段
foreach ($rows as $k => $v) {
$fields .= ",$v[0]";
}

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

echo "在 Mysql 中创建表的 Sintaxe";
echo "CREATE TABLE $table_new SELECT $fields FROM $table_old";
echo "Sintaxe for Insert 从旧表到新表 Mysql";
echo "INSERT INTO $table_new $fields SELECT $fields FROM $table_old";

于 2015-04-11T14:34:48.873 回答
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);
于 2014-04-30T14:35:43.220 回答
0

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

INSERT INTO titles (columns-other-than-the-primary-key) 
    SELECT columns-of-the-same-order FROM titles_anon
于 2012-05-25T03:46:39.987 回答
0

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

于 2012-05-25T03:47:48.707 回答