MySQL 如何仅插入MySQL表中不存在的记录?

MySQL 如何仅插入MySQL表中不存在的记录?

在实际开发中,我们经常需要插入新的记录到MySQL表中,但我们又不希望重复插入已经存在的记录。这时候,我们可以使用MySQL的INSERT INTO语句配合SELECT语句来实现仅插入不存在的记录。

阅读更多:MySQL 教程

什么是INSERT INTO语句和SELECT语句?

INSERT INTO语句是MySQL中用来插入一条或多条记录到表中的语句,语法如下:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

其中,table_name是要插入记录的表名,column1, column2, column3, …是要插入记录的列名,而value1, value2, value3, …是要插入记录的值。

而SELECT语句是MySQL中用来查询数据库中的数据的语句,语法如下:

SELECT column1, column2, column3, ...
FROM table_name;

其中,column1, column2, column3, …是要查询的列名,table_name是要查询的表名。

如何仅插入MySQL表中不存在的记录?

我们可以通过在INSERT INTO语句中配合SELECT语句来实现仅插入MySQL表中不存在的记录。具体方法是,首先在SELECT语句中查询出要插入的记录,然后将其作为子查询嵌入到INSERT INTO语句中,只插入SELECT语句查询结果中不存在的记录。语法如下:

INSERT INTO table_name (column1, column2, column3, ...)
SELECT value1, value2, value3, ...
FROM (SELECT value1, value2, value3, ...
      FROM table_name
      WHERE NOT EXISTS (SELECT * FROM table_name WHERE column1=value1 AND column2=value2 AND column3=value3)) AS t;

其中,table_name是要插入记录的表名,column1, column2, column3, …是要插入记录的列名,而value1, value2, value3, …是要插入记录的值。NOT EXISTS子句用于判断要插入的记录是否已存在于表中。

示例

假设我们有一个表students,包含id、name、age三个字段。现在我们要插入以下两条记录:

INSERT INTO students (id, name, age)
VALUES (1, 'Tom', 20);
INSERT INTO students (id, name, age)
VALUES (2, 'Jerry', 22);

但我们又不希望重复插入已经存在的记录。这时候,我们可以使用以下语句仅插入不存在的记录:

INSERT INTO students (id, name, age)
SELECT 1, 'Tom', 20
FROM (SELECT 1, 'Tom', 20
      FROM students
      WHERE NOT EXISTS (SELECT * FROM students WHERE id=1 AND name='Tom' AND age=20)) AS t;
INSERT INTO students (id, name, age)
SELECT 2, 'Jerry', 22
FROM (SELECT 2, 'Jerry', 22
      FROM students
      WHERE NOT EXISTS (SELECT * FROM students WHERE id=2 AND name='Jerry' AND age=22)) AS t;

执行以上语句后,students表中将只插入一条记录:

id name age
1 Tom 20
2 Jerry 22

结论

通过在INSERT INTO语句中配合SELECT语句来实现仅插入MySQL表中不存在的记录,可以避免重复插入已经存在的记录。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程