私は2つの異なるデータベース、名前を持っています:
Dbtest表1からdbtest2表2までのすべてのデータと新しいエントリを選択したいと思います。
私はこれを試しました
$sqlfin = "INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1";
$resultfi = mysqli_query($db_conn, $sqlfin);
しかし、今のところ運がありません。新しいレコードが両方のテーブルに挿入されていることを確認するにはどうすればよいですか?何か助けていただければ幸いです。
この形式で試してみましょう
INSERT INTO `dbtest2`.`Table2` SELECT * FROM `dbtest`.`Table1`
INSERT ... SELECTステートメントには、次の条件が当てはまります。
- 重複キー違反の原因となる行を無視するには、IGNOREを指定します。
- AUTO_INCREMENT列は通常どおり機能します。
- バイナリログを使用して元のテーブルを再作成できるようにするために、MySQLではINSERT ... SELECTステートメントの同時挿入は許可されていません( セクション8.11.3「同時挿入」 を参照)。
- 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 TABLE dbtest2.Table2 LIKE dbtest.Table1;
クエリ秒(新しく作成されたテーブルにすべてのデータを挿入):
INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1;
INSERT INTO dbtest2 (
id,
name,
status )
SELECT id,
name,
'1'
FROM dbtest
ORDER BY id ASC
INSERT ... SELECT構文を使用できます。 SELECT部分で直接「1」を引用できることに注意してください。