我有一个电影数据库,其中电影插入名为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主键时,如何在表之间复制行?
答案 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”;