REPACE 语法规则:
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适用于primary key或unique索引,否则使用replace没有多大意义,语句和INSERT语句相同。
具体规则:
1.试图插入一行数据,
2.当存在相同的主键primay key或unique唯一关键字时,
3.从表中删除原先记录
4.插入新记录
说明:
1.当某些列未被设置时按默认值,和INSERT一样。同时,不可以引用当前行的值也不能在新行中使用值,例如:
set col_name=col_name + 1的赋值,对于右侧实际是default(col_name)+1处理,所以赋值实际是set colname
=default(col_name) + 1;
2.repalce语句会返回一个值,这个值代表影响的行数。该值为插入和删除的行数之和,对于单行replace为1,则表示被
插入一行,同时没有行删除。而>1则表示,在新行被插入之前,有一个或多个旧行被删除。
3.目前,您不能在一个子查询中,向一个表中更换,同时从同一个表中选择,也就是不能在同一个表中查询又执行replace语句
注意:replace语句需要拥有表的INSERT和DELET权限。