sql 存在更新,不存在插入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37599827/article/details/88758497

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。

猜你喜欢

转载自blog.csdn.net/qq_37599827/article/details/88758497