表结构如下:
CREATE TABLE `test` (
`name` varchar(255) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1236 DEFAULT CHARSET=utf8;
有则更新无则插入
replace into test(id,`name`) VALUES (1232,NOW());
这里要注意的是执行这个语句插入时是正常的执行条数
但更新时是
[SQL]
REPLACE into test(id,`name`) VALUES (1235,NOW());
受影响的行: 2
时间: 0.089s
执行了两句
查了一下 更新已存在的记录时会删除老记录 (这里不建议自增列做主键)
参考:http://www.cnblogs.com/martin1009/archive/2012/10/08/2714858.html
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 会造成新纪录的主键的值迅速增大。
总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了,不是因为空间不够了,而是因为主键的值没法再增加了。