【问题标题】:Check if multiple records already exits and then insert new records MySql检查是否已经存在多条记录,然后插入新记录 MySql
【发布时间】:2021-01-23 14:02:12
【问题描述】:

抱歉,如果我的问题不恰当,但我需要为我的一个项目提供答案

其实我想插入MySql的table1table2的多条记录。但是在table2中插入记录之前,我需要检查table2中是否已经存在任何记录,如果存在任何一条记录,则跳过该记录并插入剩余的记录。

例如:我想从 table1 插入记录 101 和 102 到 table2,但如果 table2 中已经存在记录 101,则跳过 101 并插入 102。

这是我将记录从table1 插入到table2 的代码

INSERT INTO table2 (owner_id, month,date,medium, monthly_rent, tax_deduction, final_payment)

SELECT id, 'sep2020','2020/10/05',medium, monthly_rent, tax_deduction, final_payment
 FROM table1

WHERE table1.id =('100','101')

【问题讨论】:

  • 如果您使用的是MySQL,请不要标记其他RDBMS(如sql-server)。
  • table2有索引吗?
  • 索引是什么意思?? @P.Salmon 对不起,我不是那个专家
  • id 上有主键还是唯一键?
  • 是的 ID 在两个表中都是唯一且主要的

标签: mysql


【解决方案1】:

由于您在 id 上有一个主键,您可以使用 INSERT IGNORE..https://dev.mysql.com/doc/refman/8.0/en/insert.html 如果检测到重复键,则会发出警告并且不会添加新行。例如

DROP TABLE IF EXISTS T,T1;
CREATE TABLE T (ID INT, VAL INT);
CREATE TABLE T1 (ID INT PRIMARY KEY,VAL INT);

INSERT INTO T VALUES (101,10),(102,20),(103,30);

INSERT IGNORE INTO T1 
 SELECT ID,VAL
FROM T;

UPDATE T SET VAL = 50 WHERE ID = 101;

INSERT IGNORE INTO T1 
 SELECT ID,VAL
FROM T;



mysql> SELECT * FROM T;
+------+------+
| ID   | VAL  |
+------+------+
|  101 |   50 |
|  102 |   20 |
|  103 |   30 |
+------+------+
3 rows in set (0.05 sec)

mysql> SELECT * FROM T1;
+-----+------+
| ID  | VAL  |
+-----+------+
| 101 |   10 |
| 102 |   20 |
| 103 |   30 |
+-----+------+
3 rows in set (0.00 sec)

似乎每次向 table1 添加新行时,您都希望向 table2 添加一行,因此可能值得考虑使用触发器来完成这项工作。 https://dev.mysql.com/doc/refman/8.0/en/triggers.html

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多