解析SQL语句中的替换和插入之间的区别
注意,除非表有主键或唯一索引,否则使用替换语句是没有意义的。这个语句将与INSERT相同,因为没有索引用于确定新行是否复制了其他行。
所有列的值是在免费更换说明。所有失踪的列设置为各自的默认值,这是由于插入相同的。你不能参考值从当前行,你也不在新的使用价值。如果你使用一个分配等col_name = col_name + 1,在右边的列名称参考处理为默认(col_name)。因此,任务是相当col_name =默认设置(col_name)+ 1。
为了能够使用替换,您必须同时具有表的插入和删除权限。
替换语句返回一个数字指示受影响的行数。数是行,删除和插入的数量总和。如果数字是1为一个单一的线替换,插入一行,没有行删除。如果数大于1时,一个或多个旧行在插入新的行删除。如果表包含多个唯一索引,而新排份不同独特的指标不同旧行值,它可能是一个单排更换几个老线。
可以很容易地确定受影响的行数是否替换只添加一行,或替换替换其他行:检查该数字是否为1(Add)或更大。
如果你使用的是C的API,你可以使用mysql_affected_rows()函数来获取受影响的行数。
目前,你不能改变它到一个表中的查询,和来自同一个表中选择。
并对算法进行了详细的描述(该算法也用于负载数据的替换):
1。尝试在表中插入新行。
2。当插入失败时,因为主键或关键字的重复关键字错误:
从表中删除重复关键字值的冲突行。
B.再次尝试将新行插入表中。
格式的用法如下:
{ } |取代low_priority延迟
{在} { }(tbl_name col_name,…)
({ } |默认值表达式,…()…),…
或:
{ } |取代low_priority延迟
{在} tbl_name
设置默认col_name = { } | expr,…
或:
{ } |取代low_priority延迟
{在} { }(tbl_name col_name,…)
选择…