MySQL 当记录不存在时插入(insert if not exists)

问题:我创建了一个表来存放客户信息,我知道可以用 insert 语句插入信息到表中,但是怎么样才能保证不会插入重复的记录呢?

答案:可以通过使用 EXISTS 条件句防止插入重复记录。

示例一:插入多条记录

假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:

 代码如下 复制代码
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

示例一:插入单条记录

 代码如下 复制代码
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

使用 dual 做表名可以让你在 select 语句后面直接跟上要插入字段的值,即使这些值还不存在当前表中

时间: 2024-09-30 09:14:07

MySQL 当记录不存在时插入(insert if not exists)的相关文章

MySQL 当记录不存在时插入 记录存在时自动更新

重要的就是上面提到的 : INSERT ... SELECT INSERT ... ON DUPLICATE KEY UPDATE INSERT ... ON DUPLICATE REPLACE   比如想往表中插入一条数据,如果表中没有该条数据才插入,如果已经存在该条数据就不插入. 首先,在创建表时,将不需要重复的字段设置为unique,然后在插入时,使用insert ignore语句 MySQL实现(Duplicate key)如果不存在则插入,存在则更新: INSERT INTO ipst

mysql 记录不存在时插入 记录存在则更新的实现方法_Mysql

mysql 记录不存在时插入在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问题的解决方案. 问题:我创建了一个表来存放客户信息,我知道可以用 insert 语句插入信息到表中,但是怎么样才能保证不会插入重复的记录呢? 答案:可以通过使用 EXISTS 条件句防止插入重复记录. 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的

MySQL下将一个表的数据插入到另外一个表的实现语句_Mysql

如果2张表的字段一致,并且希望插入全部数据,可以用这种方法: Code: 复制代码 代码如下: INSERT INTO 目标表 SELECT * FROM 来源表; 比如要将 articles 表插入到 newArticles 表中,则是: 复制代码 代码如下: INSERT INTO newArticles SELECT * FROM articles; 如果只希望导入指定字段,可以用这种方法: 复制代码 代码如下: INSERT INTO 目标表 (字段1, 字段2, ...) SELECT

mysql中插入记录时不存在时插入已经存在则更新

如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执 行旧行UPDATE.例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果: 代码如下:  代码如下 复制代码 mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1; mysql> UPDATE table SET

MySQL数据插入insert性能优化详解

对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是插入时间长.我们就有一个业务系统,每天的数据导入需要4-5个钟.这种费时的操作其实是很有风险的,假设程序出了问题,想重跑操作那是一件痛苦的事情.因此,提高大数据量系统的MySQL insert效率是很有必要的. 经过对MySQL的测试,发现一些可以提高insert效率的方法,供大家参考参考. 1. 一条SQL语句插入多条数据. 常用的插入语句如:  代码如下 复制代码 INSERTINTO`insert_table`

MySQL基于条件判断的数据插入例子

在编写程序时,我们经常会遇到一些基于条件判断的逻辑,比如:判断该条数据是否已经在数据库中存在,如果不存在,则插入. 技巧一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保语句本身没有问题,否则也会被忽略掉. 示例: INSERT IGNORE INTO books ( name ) VA

我的MYSQL学习心得(八) 插入 更新 删除

这一篇<我的MYSQL学习心得(八)>将会讲解MYSQL的插入.更新和删除语句 同样的,只会讲解跟SQLSERVER不同的地方   插入 将多行查询结果插入到表中 语法 INSERT INTO table_name1(column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition) INSERT INTO SELECT 在SQLSERVER里也是支持的 table_name1指定待插入数据的表:column_list1

mysql及redis环境部署时遇到的问题解决

redis开启远程访问redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf打开redis.conf文件在NETWORK部分有说明 解决办法:注释掉bind 127.0.0.1可以使所有的ip访问redis 若是想指定多个ip访问,但并不是全部的ip访问,可以bind 在redis3.2之后,redis增加了protected-mode,在这个模式下,即使注释掉了bind 127.0.0.1,再访问redisd时候还是报错,如下 修改办法:protected-mod

与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除_Mysql

同样的,只会讲解跟SQLSERVER不同的地方 插入 将多行查询结果插入到表中 语法 INSERT INTO table_name1(column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition) INSERT INTO SELECT 在SQLSERVER里也是支持的 table_name1指定待插入数据的表:column_list1指定待插入表中要插入数据的哪些列:table_name2指定插入数据是从 哪个表中查询