创建一个mysql记录,如果它不存在,否则更新它


create a mysql record if it doesnt exist, else update it

我想修改这个MySQL查询只插入行,如果它不存在。否则,我想更新现有行。

<?php
$query = mysql_query("UPDATE hqfjt_email_history SET datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname']
WHERE emailformname = ['emailformname'] AND leadname = ['leadname']") or die(mysql_error());
?>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~编辑>>

这对吗?

INSERT INTO hqfjt_email_history datesent = ['datesent'],emailformname =     ['emailformname'],leadname = ['leadname'] ON DUPLICATE KEY UPDATE hqfjt_email_history SET     datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname']
WHERE emailformname = ['emailformname'] AND leadname = ['leadname']

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我已经尝试了以上并得到错误:你有一个错误在你的SQL语法;查看与MySQL服务器版本对应的手册,以便在第1行'datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname "附近使用正确的语法

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

更新!好的,我试了一下,它创建了一个记录:

如果我这样做,什么都没有发生,没有更新或创建????:

<?php
$query = mysql_query("
INSERT INTO hqfjt_email_history (id, leadname, emailformname, datesent)
VALUES
('$_POST[id]','$_POST[leadname]','$_POST[emailformname]','$_POST[datesent]') ON         DUPLICATE KEY UPDATE hqfjt_email_history (datesent) VALUES ('$_POST[datesent]')     WHERE id = '$_POST[id]'");
?>

是,使用INSERT INTO ... ON DUPLICATE KEY UPDATE语法。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

您需要在表中定义一个类型为UNIQUEPRIMARY KEY的键

还有REPLACE

它将更新现有的行,或者如果它不存在将创建一个新的行,语法也类似于INSERT

它做了INSERT ... ON DUPLICATE KEY UPDATE所做的,但我认为这种方法更优雅。

是的,使用ON DUPLICATE KEY UPDATE

。下面是一个例子:

INSERT INTO <table> (<field1>, <field2>) VALUES (<value1>, <value2>)
ON DUPLICATE KEY UPDATE <field2> = 'update CONTENT';

important是主键(在phpMyAdmin表中下划线)

阅读此url

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

检查数据库emailformname和leadname是否唯一