版权声明:本文为博主原创文章,未经博主允许不得转载。 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。