mysql replace into用法详细说明 - martin.zhang

martin1009 2021-08-14 原文


mysql replace into用法详细说明


REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY

KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。 
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该

语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

所有列的值均取自在REPLACE语句中被指定的值。所有缺失的列被设置为各自的默认值,这

和INSERT一样。您不能从当前行中引用值,也不能在新行中使用值。如果您使用一个例如“

SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT

(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

为了能够使用REPLACE,您必须同时拥有表的INSERT和DELETE权限。

REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和

。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1

,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制

了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。

受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行

:检查该数是否为1(添加)或更大(替换)。

1. 尝试把新行插入到表中

2. 当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:

a. 从表中删除含有重复关键字值的冲突行

b. 再次尝试把新行插入到表中

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,…)]
VALUES ({expr | DEFAULT},…),(…),…
或:

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, …
或:

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,…)]
SELECT …

REPLACE INTO `table` (`unique_column`,`num`) VALUES (\’$unique_value\’,$num);跟INSERT INTO `table` (`unique_column`,`num`) VALUES(\’$unique_value\’,$num) ON DUPLICATE UPDATE num=$num;还是有些区别的.
区别就是replace into的时候会删除老记录。如果表中有一个自增的主键。
那么就要出问题了。

首先,因为新纪录与老记录的主键值不同,所以其他表中所有与本表老数据主键id建立的关联全部会被破坏。

其次,就是,频繁的REPLACE INTO 会造成新纪录的主键的值迅速增大。
总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了,不是因为空间不够了,而是因为主键的值没法再增加了。

发表于
2012-10-08 10:26 
martin.zhang 
阅读(84813
评论(2
编辑 
收藏 
举报

 

版权声明:本文为martin1009原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/martin1009/archive/2012/10/08/2714858.html

mysql replace into用法详细说明 - martin.zhang的更多相关文章

  1. MySQL replace into (insert into 的增强版) – 旭东的博客

    MySQL replace into (insert into 的增强版) 在使用SQL语句进行数据表插入in […]...

  2. 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了

    折腾了一周的域名备案昨天终于搞定了。 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等 […]...

  3. Linux 查看服务器开放的端口号 – 潇湘隐者

    Linux 查看服务器开放的端口号 2016-06-22 23:34  潇湘隐者  阅读(321593)  评 […]...

  4. 远程桌面无法复制粘贴传输文件解决办法 – 狼人:-)

    远程桌面无法复制粘贴传输文件解决办法 2019-06-13 09:04  狼人:-)  阅读(20226)  […]...

  5. Java解析json数组三种情况 – Coder-Wf

    Java解析json数组三种情况 1 package com.example.demo.json; 2 3 4 […]...

  6. 深度学习DeepLearning核心技术实战培训,全面掌握深度学习核心技能 – 活动家

    深度学习DeepLearning核心技术实战培训,全面掌握深度学习核心技能 2019-08-23 16:52  […]...

  7. android颜色对应的xml配置值,颜色表 – 楠妮儿

    android颜色对应的xml配置值,颜色表   <?xml version=”1.0 […]...

  8. ubuntu 16.04 连接无线网络 – jerry116

    ubuntu 16.04 连接无线网络 最近在闲置的Dell inspiron 6400上安装了ubuntu […]...

随机推荐

  1. 阿里巴巴实习生笔试题目

    用Java代码模拟实现:一个人不断往箱子里放苹果,另一个人不断从箱子里取苹果,箱子只能放5个苹果,苹果数量无限 […]...

  2. 获取root权限 – 淡定的猫叔

    获取root权限 sudo passwd root Enter new UNIX password: (在这输 […]...

  3. 【技能大赛笔记01】Zigbee点对点按键控制程序开发

    【技能大赛笔记01】Zigbee点对点按键控制程序开发 –2017年“物联网物联网技术应用与维护” […]...

  4. [Abp 源码分析]十七、ASP.NET Core 集成

    0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了。虽 […]...

  5. Android中Settings默认值的设置

    Android中Settings默认值的设置 设置Settings的默认值有两种方式 A. 在获取是有一个接口 […]...

  6. Java对List分割及使用Spring多线程调用

    Java对List分割及使用Spring多线程调用 一、 功能描述: 1.对List中的数据进行分割并作为参数 […]...

  7. 超市商品购买与管理系统 – miaoz

    超市商品购买与管理系统 熬了 三天做出来的 可能还有bug 不过我学习到了很多 其中包括密码不回显 char […]...

  8. 华为liteos了解(一)

    我来补充一下,从@華仔答案的提供的wiki中看,随便翻了一下,内核部分和协议栈的接口部分代码风格完全不一致。协 […]...

展开目录

目录导航