当前位置: 首页 > wzjs >正文

广州 环保 凡人网站建设seo全网图文推广

广州 环保 凡人网站建设,seo全网图文推广,石家庄网站建设需要多少钱,web期末网站设计大作业我们日常使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,MySQL的反应是报错并停止执行后续的语句,而replace into语句可以实现强制插入。 文章目录 一、replace into 语句简介1.1 基本用法1.2 使用set语句 二、注…

我们日常使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,MySQL的反应是报错并停止执行后续的语句,而replace into语句可以实现强制插入。

文章目录

  • 一、replace into 语句简介
    • 1.1 基本用法
    • 1.2 使用set语句
  • 二、注意事项
    • 2.1 替换时必须要有主键或唯一索引
    • 2.2 替换时无法引用旧行的数据

一、replace into 语句简介

insert into语句在插入数据时如果遇到主键或唯一键冲突时,其反应是报错并返回。而如果你想强制插入,即遇到键值冲突时使用最新的数据替换原数据,则可以用replace into来代替insert into语句。

1.1 基本用法

先创建一张测试表,并插入2条数据:

create table mytab(
id int not null auto_increment primary key,
source varchar(16),
value int default 999);insert into mytab values(1, 'insert', 100),(2,'insert', 200);
table mytab;

在这里插入图片描述

下面用insert into语句插入2条数据,这里主键id=2出现了冲突,语句会执行失败:

insert into mytab values(2, 'insert', 200), (3, 'insert', 300);
table mytab;

在这里插入图片描述

将insert关键字替换为replace,当出现主键或唯一键冲突时,MySQL会先将表中冲突的数据删除,然后再插入,即隐式的帮你做了一个delete操作:

replace into mytab values(2, 'replace', 200), (3, 'replace', 300);
table mytab;

在这里插入图片描述
这里插入了2行数据,但是返回结果显示 3 rows affected,即是删除了1行,插入2行,共影响3行数据。同时Duplicates:1,显示有1行数据出现了重复。

1.2 使用set语句

replace into 还可以set语句用来指定每个列的值,这里更新id为1的行:

replace into mytab set id=1, source='set', value=101;
table mytab;

在这里插入图片描述

对于set中未指定的列,会被替换为默认值(这里不指定value的值,则其被设置成默认值999):

replace into mytab set id=1, source='set';
table mytab;

在这里插入图片描述

二、注意事项

2.1 替换时必须要有主键或唯一索引

replace into 发生替换时必须要检测到主键或唯一索引冲突,否则它的行为就和普通的insert into相同,我想把id为1的行value值设置为100,但仅引用source列,而通过source列无法判定冲突:

replace into mytab set source='set', value=100;
table mytab;

在这里插入图片描述
所以最终语句并没有像我预想的那样发生替换,而是插入了一行新数据。

2.2 替换时无法引用旧行的数据

如果我想在发生冲突时在原数据的基础上进行更新,这种场景replace into语句是无法做到的,因为在插入发生之前旧数据已经被删除了,所以是无法引用旧数据的,这里尝试将id=2的数据value值+1:

replace into mytab set id=2, source='plus 1', value=value+1;
table mytab;

在这里插入图片描述
可以看到最终结果并不是预想的201,而是1000。这是因为value=value+1,运算时无法引用旧值,而是引用了默认值。如果想实现冲突时在原数据上更新的效果,可以通过insert into … on duplcate key update语句实现。

最后提一句,replace into语句是MySQL对标准SQL的扩展,在其他RDBMS中可能并不适用。

http://www.dtcms.com/wzjs/156071.html

相关文章:

  • 莱州政府网站苏州网站建设书生
  • 和印度做外贸的网站厦门网站推广公司哪家好
  • 一个网站余姚什么第一接单网app地推和拉新
  • 简述一个商务网站建设的步骤重庆的seo服务公司
  • 六安企业网站建设靠谱广州seo公司
  • 国内网页设计师个人网站东营网站推广公司
  • 网站设计知名企业常见的网站推广方式
  • 制作公司宣传册宝鸡seo
  • 全运会网站建设方案新闻热点事件2024最新
  • 网站开发论文开题报告网站如何发布
  • 素材分享网站源码如何自己制作网页
  • 如何给网站做排名优化百度推广营销
  • 天站网站建设百度官网首页
  • 西安市建设协会网站网站关键词排名seo
  • 福建省鑫通建设有限公司网站网页推广怎么做
  • 上海建设工程咨询网站广告投放平台公司
  • 成都最好的汽车网站建设可以下载新闻视频的网站
  • 网站出租建设最近实时热点事件
  • 重庆建设摩托官方网站自媒体营销
  • 我做网站可以赚钱吗手机百度2020最新版
  • 湛江免费建站平台网站制作和推广
  • 专业做网站建设的公司百度快速提交入口
  • 网站建站销售怎么做免费个人网站建站申请
  • 农产品跨境电商平台有哪些企业站seo
  • 手机怎么做黑网站网站域名查询地址
  • 做app网站的公司名称广告联盟骗局
  • 合肥建设工程交易网站网址提交百度
  • 网站做优化有必要吗360广告推广平台
  • 宿州网站建设零聚思放心纯手工seo公司
  • 做网站项目前期工作包括哪些2022最近的新闻大事10条