`
caijingbin0207
  • 浏览: 106924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转 SQL当记录不存在时插入insert if not exists

sql 
阅读更多

                                      SQL当记录不存在时插入insert if not exists

 

转自:http://blog.sina.com.cn/s/blog_5564eb640100i42t.html

 

插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问题的解决方案。

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

示例一:插入多条记录
假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:

Code:


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);


示例二:插入单条记录
Code:


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 语句后面直接跟上要插入字段的值,即使这些值还不存在当前表中。

Ps:也可以是一个表(clients):


INSERT INTO clients
(id, name, type)
SELECT 10345, 'IBM', 'advertising'
FROM clients
WHERE not exists (select * from clients
where id = 10345);

转自:http://blog.sina.com.cn/s/blog_5564eb640100i42t.html

分享到:
评论

相关推荐

    mysql insert if not exists防止插入重复记录的方法

    使用`NOT EXISTS`子查询,我们可以构造一个`INSERT`语句,只有当插入的记录在表中不存在时,才会执行插入操作。 **示例一:插入多条记录** 如果我们有一个`suppliers`表,想将所有供应商转换为客户,并且客户类型为...

    mssql和sqlite中关于if not exists 的写法

    如果条件满足,即对象不存在,那么`IF NOT EXISTS`后的语句将被执行,否则不会执行。 2. **SQLite中的`IF NOT EXISTS`** SQLite并不直接支持`IF NOT EXISTS`语句,但可以通过`INSERT`语句的`WHERE NOT EXISTS`...

    SQLServer中防止并发插入重复数据的方法详解

    例如,使用`INSERT INTO...SELECT`语句结合`NOT EXISTS`子查询,可以在插入之前检查特定条件是否满足。这种方法适用于复杂的情况,例如当插入依赖于多个字段的组合值时。示例如下: ```sql INSERT INTO Table(****...

    sqlite避免重复插入数据

    例如,当添加一个新的兵种类型到 `troops_types` 表中时,如果该类型的 `id` 已经存在,则该插入操作会被忽略,不会导致错误或异常。 此外,作者还使用了 `INSERT OR REPLACE` 方法。这种方法会在遇到重复数据时先...

    sqlserver sql语法大全

    PRINT '全局临时表不存在'; END ``` **说明:** - `tempdb`:临时表所在的数据库。 - `'U'`:表示用户表或临时表。 #### 判断视图是否存在 与判断表存在的方式类似。 **语法示例:** ```sql IF EXISTS(SELECT * ...

    Mysql SQL语句

    如果希望在数据库已存在时不抛出错误,则可以使用`IF NOT EXISTS`条件。 - 示例:`CREATE DATABASE IF NOT EXISTS mytest;` - **选择数据库**: 使用`USE`命令来选择一个数据库进行后续的操作。 - 示例:`USE ...

    mysql的常用sql语句.pdf

    同样地,`IF EXISTS` 防止表不存在时出错。 ##### 修改表结构 修改表结构可以通过 `ALTER TABLE` 实现: - **添加列** ```sql ALTER TABLE table_name ADD column_name datatype; ``` - **删除列** ```sql ...

    总结SQLite不支持的SQL语法差异

    在SQL Server中,`IF NOT EXISTS`用于检查是否存在满足条件的记录: ```sql IF NOT EXISTS (SELECT * FROM aa WHERE ids = 5) BEGIN INSERT INTO aa (nickname) SELECT 't'; END ``` 而在SQLite中,可以使用`NOT ...

    sql server 2005第十二课(sql server触发器)

    IF EXISTS (SELECT 1 FROM inserted WHERE DepartmentID NOT IN (SELECT ID FROM Departments)) BEGIN raiserror('无效的部门ID', 16, 1); ROLLBACK TRANSACTION; END; END; ``` 这个修改后的触发器不仅分配...

    SQLServer数据库实用语法

    PRINT '表不存在'; END ``` 这段代码检查名为 `CarPyy` 的表是否存在。 3. **检查列是否存在:** ```sql IF EXISTS(SELECT * FROM sys.columns WHERE name = 'colname1' AND id = OBJECT_ID('表名')) PRINT ...

    全国地区数据SQL

    如果不存在,则执行`CREATE TABLE`语句来创建该表。这种方式可以防止重复创建同名表,确保数据库结构的正确性和完整性。 表`S_Province`包含以下列: - `ProvinceID`: 一个自动递增的大整型(`bigint`)字段,用作...

    触发器级联操作的相关问题

    类似地,当在`SC`表中插入记录,如果插入的`CNO`(课程编号)在`Course`(课程表)中不存在,触发器`SC_ins`会先在`Course`表中插入相应的课程记录,确保所有选修的课程都已存在于课程表中。 ```sql CREATE ...

    全国省市区sql

    这段SQL语句首先检查表是否存在,如果不存在则创建一个新的`area`表。表中使用了`MyISAM`存储引擎,并设置了默认字符集为`utf8`,以便正确显示中文字符。主键`id`采用自动增长的方式设置。 #### 二、数据插入 接...

    实验2 修改表结构和插入记录.docx

    DROP TABLE IF EXISTS yg; -- 创建 yg 表 CREATE TABLE yg( 编号 char(6) NOT NULL PRIMARY KEY, 姓名 char(10) NOT NULL, 出生日期 date, 性别 tinyint(1) NOT NULL DEFAULT 1, 籍贯 char(10) ); ``` 2....

    公司招聘的SQL SEVER题目与答案

    如果不存在,则插入新记录。`IF NOT EXISTS (SELECT * FROM person WHERE personname = '张三' AND deptname = '财务处') INSERT INTO person(personname, deptname) VALUES ('张三', '财务处')` 这样的语句可以确保...

    SQL server 语句大全

    IF EXISTS (SELECT * FROM inserted WHERE Email NOT LIKE '%@%.%') BEGIN RAISERROR('Invalid email address.', 16, 1); ROLLBACK TRANSACTION; END; END; ``` ### 数据库备份和恢复 定期备份数据库可以防止...

    SQL Server初级入门SQL语句

    - 使用 `DROP DATABASE IF EXISTS` 可以避免因数据库不存在而产生的错误。 #### 二、表的操作 接下来,我们将学习如何创建和删除表。 ##### 创建表 ```sql CREATE TABLE card ( id VARCHAR(10) CHECK (id LIKE '...

Global site tag (gtag.js) - Google Analytics