我正在将一个msSQL数据库移动到mySQL。在我的MS数据库中,我的存储过程使用"upsert“(update,如果@@rowcount = 0,插入)类型的东西。
我想在我的SQL中做同样的思考。我找到了几个选择
1)使用-在重复的键更新值(x、y、x)上插入xxxx。
2)替换为table_name (col_name,.)(价值.)
哪个更有效?我倾向于第二个,因为我会做很多更新,而不是插入。而且,我相信重复键上的insert会不断地碰撞auto_increment值,即使它最终是一个更新。
另一个注意事项:每个帐户记录将每晚更新。偶尔会插入一个新的帐户记录,但同样,主要是帐户将被更新。
还有其他[更好的选择]我忽略了吗?我在正确的轨道上吗?
发布于 2014-02-27 20:23:25
MySQL有几个这样的工具:
如果存在行,则REPLACE具有DELETE的效果,然后是INSERT。这意味着它不能对数据执行部分更新,任何未指定的字段都将恢复为默认值。
ON DUPLICATE KEY UPDATE是INSERT上的一个选项,它可以处理密钥冲突,包括PRIMARY KEY上的冲突。如果找到一个副本,则执行您指定的UPDATE语句。
例如:
INSERT INTO people (id, name) VALUES (1, 'Jeremy')
ON DUPLICATE KEY UPDATE name=VALUES(name)您可以使用VALUES()在INSERT中指定相同的值,而不必重复它。
重要的是要记住,NULL值可以复制,因为它们不存在,也不等效:NULL=NULL是假的。可以强制非NULL值为唯一值,也可以使用NOT NULL列来避免这种情况。
https://stackoverflow.com/questions/22074355
复制相似问题