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

时间:2019-05-22 13:00:27

标签: php mysql

我有一个函数,可以让我从旧数据库到新数据库的所有表及其列。到目前为止一切正常。现在,我需要扩展该功能,以便在新数据库内的所有表中添加代理键(具有自动增量的主键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);

}

注意:当我运行此功能时,旧数据库和新数据库已经存在。

那我该如何更改我的inser语句,以便在每次插入过程中添加一个ID(自动递增)列?

2 个答案:

答案 0 :(得分:1)

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

如果您的新表未在ID列上设置自动递增,请添加它

ALTER TABLE `mytablename` 
CHANGE `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT 

在{{1}中的NULL之前添加*-这将强制SELECT(在列列表中首先出现)使用{{1 }},因为它不能为ID

AUTO_INCREMENT

答案 1 :(得分:1)

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

create table new_table as (select * from old_table);

alter table new_table add column id primary key auto_increment;