sql 存在更新,不存在插入

本文详细介绍了在SQL Server和MySQL中如何使用`REPLACE INTO`语句来实现存在则更新、不存在则插入的操作。内容包括语法规则、建表语句、实例演示以及语句原理,强调了主键的重要性以及不同情况下受影响的行数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqlserver

1、语法

if exists (select * from users where name='张三')
	print 1
ELSE
	print 0

2、建表语句

CREATE TABLE [dbo].[users] (
[id] int NOT NULL IDENTITY(1,1) ,
[name] varchar(50) NULL ,
[sex] varchar(5) NULL 
)
GO
SET IDENTITY_INSERT [dbo].[users] ON
GO
INSERT INTO [dbo].[users] ([id], [name], [sex]) VALUES (N'1', N'李四', N'女');
INSERT INTO [dbo].[users] ([id], [name], [sex]) VALUES (N'2', N'张三', N'女');
INSERT INTO [dbo].[users] ([id], [name], [sex]) VALUES (N'3', N'王五', N'男');

3、例子,存在更新,不存在插入

if exists (select * from dbo.users s where s.name='张三')
	update users set sex='男' where name = '张三'
ELSE
	insert into users (name,sex) values ('张三','女')

—————————————————————————————————

mysql

1、语法

replace into 表名(列名1, 列名2, ..., 列名n) VALUES (值1, 值2, ..., 值n);

2、例子

replace into  students (StuName, Stuid, Class) VALUES ('张三', '123456789', '1234567');

3、语句原理
replace into 语句要求被插入的表需要有已经定义的主键,该语句通过对主键进行检索判断记录是否存在,若记录存在,则对非主键属性进行更新操作;若记录不存在,则插入一条新记录。

2019.1.7 更新:此处的更新操作指的是按新的数据覆盖该主键标识的记录,而不是针对某些列进行更新

4、受影响的行数
当相同主键记录存在,且欲更新的数据与已存在的数据完全相同时(即此时什么都不做),受影响的行数为 1。
当相同主键记录存在,且欲更新的数据与已存在的数据不完全相同时(即此时会更新数据),受影响的行数为 2。
当相同主键记录不存在时,将插入一条新的记录,受影响的行数为 1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值