web-dev-qa-db-ja.com

データベーステーブル1からデータを選択し、PHPの別のデータベーステーブル2に挿入します

私は2つの異なるデータベース、名前を持っています:

  1. dbtest:表1
  2. dbtest2:表2

Dbtest表1からdbtest2表2までのすべてのデータと新しいエントリを選択したいと思います。

私はこれを試しました

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

しかし、今のところ運がありません。新しいレコードが両方のテーブルに挿入されていることを確認するにはどうすればよいですか?何か助けていただければ幸いです。

8
Ashley

この形式で試してみましょう

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

INSERT ... SELECTステートメントには、次の条件が当てはまります。

  • 重複キー違反の原因となる行を無視するには、IGNOREを指定します。
  • AUTO_INCREMENT列は通常どおり機能します。
  • バイナリログを使用して元のテーブルを再作成できるようにするために、MySQLではINSERT ... SELECTステートメントの同時挿入は許可されていません( セクション8.11.3「同時挿入」 を参照)。
  • SELECTとINSERTが同じテーブルを参照するときのあいまいな列参照の問題を回避するには、SELECT部分​​で使用される各テーブルに一意のエイリアスを指定し、その部分の列名を適切なエイリアスで修飾します。

INSERT ... SELECT構文


新しいエントリを追加するためのトリガーの作成:

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

テーブルのTRUNCATETABLEステートメントは、DELETEを使用しないため、このトリガーをアクティブにしません。パーティションを削除しても、DELETEトリガーはアクティブになりません。

CREATE TRIGGER構文

6
AZinkey

目的のタスクに対してこのクエリを試してください:

最初にクエリ(まだ作成していない場合は、古いデータベースとまったく同じようにテーブルを作成します)

CREATE TABLE dbtest2.Table2 LIKE dbtest.Table1;

クエリ秒(新しく作成されたテーブルにすべてのデータを挿入)

INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1;
1
helpdoc
INSERT INTO dbtest2 ( 
      id, 
      name, 
      status ) 
SELECT id, 
      name,          
       '1'
FROM dbtest
ORDER BY id ASC 

INSERT ... SELECT構文を使用できます。 SELECT部分​​で直接「1」を引用できることに注意してください。

0
Nims Patel