华拓科技网
您的当前位置:首页mysqlreplaceinto用法详细说明

mysqlreplaceinto用法详细说明

来源:华拓科技网
mysqlreplaceinto⽤法详细说明

REPLACE的运⾏与INSERT很相似。只有⼀点例外,假如表中的⼀个旧记录与⼀个⽤于PRIMARYKEY或⼀个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 会造成新纪录的主键的值迅速增⼤。

总有⼀天。达到最⼤值后就会因为数据太⼤溢出了。就没法再插⼊新纪录了。数据表满了,不是因为空间不够了,⽽是因为主键的值没法再增加了。

因篇幅问题不能全部显示,请点此查看更多更全内容