sql 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 会造成新纪录的主键的值迅速增大。
总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了,不是因为空间不够了,而是因为主键的值没法再增加了。

转载于:https://www.cnblogs.com/DjangoBlog/p/3543311.html

sql replace into 与 insert into相关推荐

  1. MySQL replace into (insert into 的增强版)

    在使用SQL语句进行数据表插入insert操作时,如果表中定义了主键,插入具有相同主键的记录会报错:  Error Code: 1062. Duplicate entry 'XXXXX' for ke ...

  2. sql replace函数_SQL REPLACE函数概述

    sql replace函数 In this article, I'll show you how to find and replace data within strings. I will dem ...

  3. mysql 中 replace into 与 insert into on duplicate key update 的使用和不同点

    replace into和insert into on duplicate key update都是为了解决我们平时的一个问题 就是如果数据库中存在了该条记录,就更新记录中的数据,没有,则添加记录. ...

  4. mysql replace into 语法_mysql Replace into与Insert update

    Replace into replace into 跟 insert 功能类似, 不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引 ...

  5. mysql中 REPLACE INTO 和 INSERT INTO 的区别

    mysql中 REPLACE INTO 和 INSERT INTO 的区别 REPLACE INTO 和 INSERT INTO 功能类似,都是像表中插入数据,不同点在于:REPLACE INTO 首 ...

  6. sql replace替换多个字符_牛客网数据库SQL实战详细剖析(4150)

    文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程.具体题目可参考牛客网的SQL实战模块:https://www.nowcoder ...

  7. INERT DELEYED、INSERT IGNORE replace into和insert区别

    insert into表示插入数据,数据库会检查主键,如果出现重复会报错: replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用 ...

  8. Oracle Sql技巧 - Upsert, Multitable Insert, Undrop

    近期参加OCP培训,讲师说的太快,之前一直是SQLSERVER,很多东西要恶补了. UpSert功能: MERGE <hint> INTO <table_name> USING ...

  9. 导出数据在SQL Server中作为INSERT INTO

    我正在使用SQL Server 2008 Management Studio并且有一个我想要迁移到其他数据库服务器的表. 有没有选项将数据导出为插入SQL脚本? #1楼 您还可以从以下位置查看SQL ...

最新文章

  1. Android入门第八篇之GridView(九宫图)
  2. 使用soundcard在Python中操作声卡
  3. 捉虫记 单步跟踪 条件断点 变量查看实践
  4. PyQt5 技术篇-调用消息对话框(QMessageBox)进行简单提示!
  5. 《降级论》《按时交作业的学生何以常穿脏袜子》读后感
  6. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Listbox/Scrollbar)
  7. ORACLE使用中的常见 实用的问题
  8. python从入门到精通-python从入门到精通视频(大全60集)
  9. 计算机软件实习项目四 —— 校园一卡通管理系统 (代码实现) 12-27
  10. 科隆OPTIFLUX2100W/4100C分体式电磁流量计维修
  11. windows运行库文件
  12. 全新的Lync 2013为我们带来了什么?
  13. 从51开始的单片机之旅(一)----流水灯、矩形键盘、电子时钟
  14. R语言3.15 综合评价方法
  15. My Publications
  16. Imblearn package study(不平衡数据处理之过采样、下采样、综合采样)
  17. 为什么不愿意专升本 学历有什么用
  18. ftp中转服务器,Serv-U FTP文件服务器组建攻略
  19. 人工神经网络研究综述,人工神经网络分析方法
  20. (1)!+-<<>>|^

热门文章

  1. OrionX Panel for Mac(ps摄影自动化工作流插件)支持ps2021 big sur11 汉化版
  2. 第十二届 2021年1月 蓝桥杯青少年组省赛C++组 第1题--第3题(scratch实现)
  3. NOI入门级数学: 数及其运算 数的进制之二进制
  4. python报错:xml.parsers.expat.ExpatError: not well-formed (invalid token): line 3, column 1的解决办法
  5. Qt工作笔记-使用Qt中QProcess与iostream中system调用外部进程
  6. Linux工作笔记-CentOS 调整 home分区 扩大 root分区
  7. Qt工作笔记-在界面上输出变量、类、this指针的地址
  8. 6.1树的定义和存储
  9. python3.4安装matplotlib_在python3.7下怎么安装matplotlib
  10. mysql 1045错误ODBC_MySQL ERROR 1045 (28000) 错误的解决办法