转 SQL当记录不存在时插入insert if not exists
转自:http://blog.sina.com.cn/s/blog_5564eb640100i42t.html
插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问题的解决方案。 问题:我创建了一个表来存放客户信息,我知道可以用 insert 语句插入信息到表中,但是怎么样才能保证不会插入重复的记录呢? 示例一:插入多条记录 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);
Ps:也可以是一个表(clients): INSERT INTO clients (id, name, type) SELECT 10345, 'IBM', 'advertising' FROM clients WHERE not exists (select * from clients where id = 10345); |
相关推荐
使用`NOT EXISTS`子查询,我们可以构造一个`INSERT`语句,只有当插入的记录在表中不存在时,才会执行插入操作。 **示例一:插入多条记录** 如果我们有一个`suppliers`表,想将所有供应商转换为客户,并且客户类型为...
如果条件满足,即对象不存在,那么`IF NOT EXISTS`后的语句将被执行,否则不会执行。 2. **SQLite中的`IF NOT EXISTS`** SQLite并不直接支持`IF NOT EXISTS`语句,但可以通过`INSERT`语句的`WHERE NOT EXISTS`...
例如,使用`INSERT INTO...SELECT`语句结合`NOT EXISTS`子查询,可以在插入之前检查特定条件是否满足。这种方法适用于复杂的情况,例如当插入依赖于多个字段的组合值时。示例如下: ```sql INSERT INTO Table(****...
例如,当添加一个新的兵种类型到 `troops_types` 表中时,如果该类型的 `id` 已经存在,则该插入操作会被忽略,不会导致错误或异常。 此外,作者还使用了 `INSERT OR REPLACE` 方法。这种方法会在遇到重复数据时先...
PRINT '全局临时表不存在'; END ``` **说明:** - `tempdb`:临时表所在的数据库。 - `'U'`:表示用户表或临时表。 #### 判断视图是否存在 与判断表存在的方式类似。 **语法示例:** ```sql IF EXISTS(SELECT * ...
如果希望在数据库已存在时不抛出错误,则可以使用`IF NOT EXISTS`条件。 - 示例:`CREATE DATABASE IF NOT EXISTS mytest;` - **选择数据库**: 使用`USE`命令来选择一个数据库进行后续的操作。 - 示例:`USE ...
同样地,`IF EXISTS` 防止表不存在时出错。 ##### 修改表结构 修改表结构可以通过 `ALTER TABLE` 实现: - **添加列** ```sql ALTER TABLE table_name ADD column_name datatype; ``` - **删除列** ```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 ...
IF EXISTS (SELECT 1 FROM inserted WHERE DepartmentID NOT IN (SELECT ID FROM Departments)) BEGIN raiserror('无效的部门ID', 16, 1); ROLLBACK TRANSACTION; END; END; ``` 这个修改后的触发器不仅分配...
PRINT '表不存在'; END ``` 这段代码检查名为 `CarPyy` 的表是否存在。 3. **检查列是否存在:** ```sql IF EXISTS(SELECT * FROM sys.columns WHERE name = 'colname1' AND id = OBJECT_ID('表名')) PRINT ...
如果不存在,则执行`CREATE TABLE`语句来创建该表。这种方式可以防止重复创建同名表,确保数据库结构的正确性和完整性。 表`S_Province`包含以下列: - `ProvinceID`: 一个自动递增的大整型(`bigint`)字段,用作...
类似地,当在`SC`表中插入记录,如果插入的`CNO`(课程编号)在`Course`(课程表)中不存在,触发器`SC_ins`会先在`Course`表中插入相应的课程记录,确保所有选修的课程都已存在于课程表中。 ```sql CREATE ...
这段SQL语句首先检查表是否存在,如果不存在则创建一个新的`area`表。表中使用了`MyISAM`存储引擎,并设置了默认字符集为`utf8`,以便正确显示中文字符。主键`id`采用自动增长的方式设置。 #### 二、数据插入 接...
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....
如果不存在,则插入新记录。`IF NOT EXISTS (SELECT * FROM person WHERE personname = '张三' AND deptname = '财务处') INSERT INTO person(personname, deptname) VALUES ('张三', '财务处')` 这样的语句可以确保...
IF EXISTS (SELECT * FROM inserted WHERE Email NOT LIKE '%@%.%') BEGIN RAISERROR('Invalid email address.', 16, 1); ROLLBACK TRANSACTION; END; END; ``` ### 数据库备份和恢复 定期备份数据库可以防止...
- 使用 `DROP DATABASE IF EXISTS` 可以避免因数据库不存在而产生的错误。 #### 二、表的操作 接下来,我们将学习如何创建和删除表。 ##### 创建表 ```sql CREATE TABLE card ( id VARCHAR(10) CHECK (id LIKE '...