我有两个不同的数据库,名称:
我想从dbtest表1中选择所有数据和新条目到dbtest2表2。
我试过这个
$sqlfin = "INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1";
$resultfi = mysqli_query($db_conn, $sqlfin);
但到目前为止还没有运气。我怎样才能确保将新记录插入两个表中?任何帮助将不胜感激?
答案 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部分中使用的表,并在其中限定列名 部分使用适当的别名。
创建触发器以添加新条目
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触发器。
答案 1 :(得分:1)
尝试此查询以执行所需任务:
先查询 (如果没有,请像在旧数据库中一样创建表格):
CREATE TABLE dbtest2.Table2 LIKE dbtest.Table1;
第二次查询 (将所有数据插入新创建的表格):
INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1;
答案 2 :(得分:1)
您的查询看起来正确,但如果2个表具有不同的结构,则会失败。指定列以避免它:
VibE
<小时/> 使用PDO(一种替代答案,我对 Mysqli 不太了解):
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部分。