从db表1中选择数据并将其插入到php中的另一个db表2中

时间:2017-11-21 10:54:01

标签: php mysql triggers sql-insert bulkinsert

我有两个不同的数据库,名称:

  1. dbtest:表1
  2. dbtest2:表2
  3. 我想从dbtest表1中选择所有数据和新条目到dbtest2表2。

    我试过这个

    $sqlfin = "INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1";
    $resultfi = mysqli_query($db_conn, $sqlfin);
    

    但到目前为止还没有运气。我怎样才能确保将新记录插入两个表中?任何帮助将不胜感激?

4 个答案:

答案 0 :(得分:6)

让我们以这种格式试试

INSERT INTO `dbtest2`.`Table2` SELECT * FROM `dbtest`.`Table1`
  

以下条件适用于INSERT ... SELECT语句:

     
      
  • 指定IGNORE以忽略会导致重复键违规的行。
  •   
  • AUTO_INCREMENT列照常工作。
  •   
  • 为确保二进制日志可用于重新创建原始表,MySQL不允许INSERT ... SELECT的并发插入   陈述(见Section 8.11.3, “Concurrent Inserts”)。
  •   
  • 当SELECT和INSERT引用同一个表时,为了避免模糊的列引用问题,请为每个引用一个唯一的别名   SELECT部分​​中使用的表,并在其中限定列名   部分使用适当的别名。
  •   

INSERT ... SELECT Syntax

创建触发器以添加新条目

CREATE TRIGGER copy_record BEFORE INSERT ON dbtest.Table1 
FOR EACH ROW 
BEGIN 
   INSERT INTO dbtest2.Table2 (first_name, last_name) VALUES (new.first_name, new.last_name); 
END
  

trigger_event表示激活该操作的操作类型   触发。允许使用这些trigger_event值:

INSERT: The trigger activates whenever a new row is inserted into the table; for example, through INSERT, LOAD DATA, and REPLACE
     

语句。

UPDATE: The trigger activates whenever a row is modified; for example, through UPDATE statements.

DELETE: The trigger activates whenever a row is deleted from the table; for example, through DELETE and REPLACE statements. DROP TABLE
     表中的

和TRUNCATE TABLE语句不会激活它   触发器,因为它们不使用DELETE。删除分区不会   激活DELETE触发器。

CREATE TRIGGER Syntax

答案 1 :(得分:1)

尝试此查询以执行所需任务:

先查询 (如果没有,请像在旧数据库中一样创建表格)

CREATE TABLE dbtest2.Table2 LIKE dbtest.Table1;

第二次查询 (将所有数据插入新创建的表格)

INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1;

答案 2 :(得分:1)

您的查询看起来正确,但如果2个表具有不同的结构,则会失败。指定列以避免它:

VibE

<小时/> 使用PDO(一种替代答案,我对 Mysqli 不太了解):
您可以使用 PDO 连接到 Mysql ,而无需在处理多个时提供数据库名称(但这不是强制性的),例如:< p>

INSERT INTO dbtest2.Table2 (2_col_1, 2_col_2) SELECT 1_col_1, 1_col_2 FROM dbtest.Table1

然后编写数据库名称,表格和列,例如制作$db = new PDO( "mysql:host=" . $host . ";", $user, $password, $options ); 时(就像你一样):用JOIN

分隔
.

(示例测试并正常工作)

答案 3 :(得分:0)

INSERT INTO dbtest2 ( 
      id, 
      name, 
      status ) 
SELECT id, 
      name,          
       '1'
FROM dbtest
ORDER BY id ASC 

您可以使用INSERT ... SELECT语法。请注意,您可以引用&#39; 1&#39;直接在SELECT部分​​。