为了账号安全,请及时绑定邮箱和手机立即绑定

PHP/MySQL:将数据从旧数据库(没有 ID 的表)移动到新数据库(有 ID 的表)

PHP/MySQL:将数据从旧数据库(没有 ID 的表)移动到新数据库(有 ID 的表)

PHP
哔哔one 2021-06-29 17:57:43
我有一个函数可以将所有带有列的表从旧数据库获取到新数据库。到目前为止一切正常。现在我需要扩展该函数,以便在我的新数据库中的所有表中添加一个代理键(具有自动增量的主键 ID)。旧数据库:+-----------------------------------+------------+--------+|               Col1                |    Col2    | NumCol |+-----------------------------------+------------+--------+| Value 1                           | Value 2    |    123 || This is a row with only one cell  |            |        || This row is testing html entities | Te<br />st |     45 |+-----------------------------------+------------+--------+新数据库:+----+-----------------------------------+------------+--------+| ID |               Col1                |    Col2    | NumCol |+----+-----------------------------------+------------+--------+|  1 | Value 1                           | Value 2    |    123 ||  2 | This is a row with only one cell  |            |        ||  3 | This row is testing html entities | Te<br />st |     45 |+----+-----------------------------------+------------+--------+如您所见,除了每个表中的新列 ID 之外,所有内容都保持不变。这是我将旧数据库中的所有内容复制到新数据库的功能:public function loadOldDBtoNewDB($oldDB,$newDB){    $sqlshowTables = "SHOW TABLES ";    $statement = $this->db->prepare($sqlshowTables);    $statement->execute();    $tables = $statement->fetchAll(PDO::FETCH_NUM);    foreach($tables as $table){        $sql[] = "INSERT INTO ".$newDB.".`".$table[0]."` SELECT * FROM ".$oldDB.".`".$table[0]."`; ";    }    $sqlState = implode(' ', $sql);    $executeStatement = $this->db->exec($sqlState);}注意:运行此函数时,旧数据库和新数据库已经存在。那么我需要如何更改我的插入语句,以便在每次插入期间添加一个 ID(自动增量)列?
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您的新表应该已经AUTO_INCREMENT在id列上。然后NULL在执行选择时为其提供一个值!


如果您的新表没有在ID列上设置自动增量,请添加


ALTER TABLE `mytablename` 

CHANGE `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT 

在您的NULL之前添加一个- 这将强制(首先出现在您的列列表中)使用,因为它不能是。*SELECTIDAUTO_INCREMENTNULL


$sql[] = "INSERT INTO ".$newDB.".`".$table[0]."` SELECT NULL, * FROM ".$oldDB.".`".$table[0]."`; ";



查看完整回答
反对 回复 2021-07-02
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您还可以使用以下命令创建新表


create table new_table as (select * from old_table);


alter table new_table add column id primary key auto_increment;


查看完整回答
反对 回复 2021-07-02
  • 2 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信