replaceinto的主要功能类似于insert操作。主要区别在于,replace会根据主键或唯一索引检查数据是否存在,如果存在,先删除再更新。
#表结构:使用btree创建表` t _ test `(` id ` int(11)unsigned notnullaut _ increment,` name` varchar (1) not null default ' '主键(` id `),唯一键` IDX _ name` (` name `))。
INSERTINTOt_test(`name `)值(' a ');#或replaceintot _ test (` name `)值(` a ');以上述方式插入两条记录会提示错误:1062-重复条目' a '伪造' idx _ name '时间:0.01000s .使用replaceinto会正常执行,但id会增加1。
ps:'s replace into中的into关键字可以省略。看起来一样,但是用法有点不一样。
selectreplace('www.baidu.com '' w '' n ')from dual;
例:用描述替换表中“名称”字段中的详细信息。
updatetablesetname=replace(name,' detail '' description')
替换运行与插入非常相似。如果表中的旧记录与用于PRIMARYKEY或唯一索引的新记录具有相同的值,则在插入新记录之前会删除旧记录。
请注意,除非表有主键或唯一索引,否则使用REPLACE语句是没有意义的。该语句与INSERT相同,因为没有使用索引来确定新行是否复制其他行。
所有列的值都取自REPLACEINTO语句中指定的值。所有缺少的列都被设置为默认值,就像INSERTINTO一样。不能引用当前行中的值或使用新行中的值。如果使用诸如& quotSETcol _ name=col _ name 1 & quot,对右边列名的引用将被视为DEFAULT(col_name)。因此,该赋值相当于SETcol_name=DEFAULT(col_name) 1。
若要使用REPLACEINTO,您必须对该表拥有INSERT和DELETE权限。
REPLACE语句返回一个数字,指示受影响的行数。这个数字是删除行和插入行的总和。如果单行替换的数字为1,则插入一行,不删除任何行。如果该数字大于1,则在插入新行之前会删除一个或多个旧行。如果表包含多个唯一索引,并且新行在不同的唯一索引中复制不同的旧行的值,则有可能一行替换多个旧行。
受影响的行数可以很容易地确定REPLACE是否只添加了一行,或者REPLACE是否还替换了其他行:检查数字是否为1(添加)或更大(替换)。
目前不能在一个子查询中,向一个表中更换,同时从同一个表中选择。
三种形式:
1.replaceintotbl _ name (col _ name,)值(.) 2.replaceintotbl _ name (col _ name,)选择.3.replacintotbl _ namesetcol _ name=value,