今天,边肖将与您分享一个关于Mysql中replace和replace into用法的解释。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友一起看看吧。
Mysql的replace和replace into都是经常使用的函数;Replace实际上做了一个更新操作,而不是删除后再插入;replace into实际上与insert into非常相似,但是对于replace into,如果表中的旧记录与用于主键或唯一索引的新记录具有相同的值,则在插入新记录之前,旧记录将被删除。
Replace是mysql中处理字符串的常用函数,可以替换字符串的内容。Trim拦截和字符串处理差不多,这里就不多说了。
replace into的主要功能类似于insert操作。主要区别在于,replace会根据主键或唯一索引检查数据是否存在,如果存在,则在更新前删除。
示例:
#表格结构:
创建表` t_test `(
` id ' int(11)unsigned NOT NULL AUTO _ INCREMENT,
` name` varchar(1) NOT NULL DEFAULT ' ',
主键(` id `),
使用BTREE的唯一键` idx_name` (`name `)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb 4
插入第一条记录
插入t_test (`name `)值(' a ')
#或者
替换为t_test (`name `)值(' a ')
使用上述方法插入两条记录,insert into会提示错误:1062-关键字' idx _ name '重复条目' a ',时间:0.001000s .使用replace into会正常运行,但id会增加1。
ps: 中的into关键字replace into可以省略。看起来一样,但使用起来有点不一样。
一、replace(object,search,replace)
用替换替换对象中的所有搜索
从中选择替换(' www.jb51.net ',' w ',' n ').nnn.jb51.net
示例:用描述替换表表的名称字段中的详细信息。
更新表集名称=替换(名称,“详细信息”,“说明”)
二、replace into
相当于:如果不存在(从t中选择1其中id=1) insert into t (id,update _ time)值(1,getdate())else update t set update _ time=getdate()其中id=1;
替换的工作方式很像插入。如果表中的旧记录与用于主键或唯一索引的新记录具有相同的值,则在插入新记录之前会删除旧记录。
请注意,除非表有主键或唯一索引,否则使用REPLACE语句是没有意义的。该语句与INSERT相同,因为没有使用索引来确定新行是否复制了其他行。
所有列的值都取自REPLACE INTO语句中指定的值。所有缺少的列都设置为默认值,这与INSERT INTO相同。不能引用当前行中的值或使用新行中的值。如果使用诸如“SET col_name=col_name 1”这样的赋值,对右边列名的引用将被视为DEFAULT(col_name)。因此,这种赋值相当于SET col_name=DEFAULT(col_name) 1。
使用REPLACE INTO,您必须对表具有INSERT和DELETE权限。
REPLACE语句返回一个数字来指示受影响的行数。这个数字是删除行和插入行的总和。如果单行替换的数字为1,则插入一行,不删除任何行。如果该数字大于1,则在插入新行之前会删除一个或多个旧行。如果表包含多个唯一索引,并且新行在不同的唯一索引中复制不同的旧行的值,则有可能一行替换多个旧行。
受影响的行数可以很容易地确定replace是否只添加一行,或者REPLACE是否还替换其他行:检查数字是否为1 (add)或更大(REPLACE)。
目前,您不能在子查询中更改到一个表并从同一个表中进行选择。
以下是所用算法的更详细描述(该算法也用于加载数据.替换):
1.尝试在表格中插入新行
2.当由于主键或唯一关键字的重复关键字错误而导致插入失败时:
A.从表中删除具有重复键值的冲突行。
B.再次尝试在表格中插入新行
三种形式:
1.替换成tbl_name(col_name,)值(.)
2.替换成tbl_name(col_name,)选择.
3.替换为tbl_name集合col_name=value,
PS:
mysql中常用的三种插入数据的语句:
Insert into表示插入数据,数据库会检查主键,如有重复会报错;
替换成意味着插入替换数据。需求表中有主键或唯一索引。如果数据库中有数据,它将被新数据替换。如果没有数据效果,就和插入一样。
插入忽略意味着如果相同的记录已经存在于中,当前的新数据将被忽略;
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。