replace与replace into怎么在Mysql数据库中使用

52次阅读
没有评论

共计 2432 个字符,预计需要花费 7 分钟才能阅读完成。

自动写代码机器人,免费开通

本篇文章为大家展示了 replace 与 replace into 怎么在 Mysql 数据库中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Mysql replace 与 replace into 都是经常会用到的功能;replace 其实是做了一次 update 操作,而不是先 delete 再 insert;而 replace into 其实与 insert into 很相像,但对于 replace into,假如表中的一个旧记录与一个用于 PRIMARY KEY 或一个 UNIQUE 索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。

replace 是 mysql 里面处理字符串比较常用的函数,可以替换字符串中的内容。类似的处理字符串的还有 trim 截取操作,这里就不在多说。

replace into 主要作用类似 insert 插入操作。主要的区别是 replace 会根据主键或者唯一索引检查数据是否存在,如果存在就先删除在更新。

例子:

# 表结构:CREATE TABLE `t_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(1) NOT NULL DEFAULT  ,
 PRIMARY KEY (`id`),
 UNIQUE KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

插入第一条记录

INSERT INTO t_test (`name`)VALUES(a)
REPLACE INTO t_test (`name`)VALUES(a)

采用上面的方式插入二条记录,insert into 会提示错误:1062 – Duplicate entry‘a for key‘idx_name , Time: 0.001000s。使用 replace into 则会正常执行,只是 id 自增长 1。

ps: replace into 中 into 关键字可以省略的,看起来一样,使用有点区别

一、replace(object,search,replace)

把 object 中出现 search 的全部替换为 replace

select replace(www.jb51.net , w , n) from …  —   nnn.jb51.net

例:把表 table 中的 name 字段中的 detail 替换为 description

update table set name=replace(name, detail , description)

二、replace into

相当于:if not exists (select 1 from t where id = 1) insert into t(id, update_time) values(1, getdate()) else update t set update_time = getdate() where id = 1;

REPLACE 的运行与 INSERT 很相像。如果表中的一个旧记录与一个用于 PRIMARY KEY 或一个 UNIQUE 索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。

注意,除非表有一个 PRIMARY KEY 或 UNIQUE 索引,否则,使用一个 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 语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行 REPLACE 该数为 1,则一行被插入,同时没有行被删除。如果该数大于 1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。

受影响的行数可以容易地确定是否 REPLACE 只添加了一行,或者是否 REPLACE 也替换了其它行:检查该数是否为 1(添加)或更大(替换)。

目前,您不能在一个子查询中,向一个表中更换,同时从同一个表中选择。

以下是所用算法的更详细的说明(该算法也用于 LOAD DATA…REPLACE):

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

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

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

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

三种形式:

1. replace into tbl_name(col_name, …) values(…)

2. replace into tbl_name(col_name, …) select …

3. replace into tbl_name set col_name=value, …

PS:

mysql 中常用的三种插入数据的语句:

insert into 表示插入数据,数据库会检查主键,如果出现重复会报错;

replace into 表示插入替换数据,需求表中有 PrimaryKey,或者 unique 索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和 insert into 一样;

insert ignore 表示,如果中已经存在相同的记录,则忽略当前新数据;

上述内容就是 replace 与 replace into 怎么在 Mysql 数据库中使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-16发表,共计2432字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)