如果不存在则插入,否则在同一查询中的两个表上更新

时间:2013-04-26 15:26:08

标签: mysql

所以我一直在读,mysql不支持插入到乘法表中。 你需要在查询中实际执行两个或更多INSERT INTO。但我的问题是更新两个表,但如果不存在则插入。可以只用一个查询吗?

我有这个。

UPDATE user, userdetails SET
userdetails.firstname   = ?,
user.username       = ?,
user.email              = ?,
userdetails.location    = ?
WHERE user.id               = ? 
AND userdetails.user_id     = ?

$values = array($firstname,$username,$email,$location,$_SESSION['id'],$_SESSION['id']);

但它并不总是进入最后一行

 AND userdetails.user_id='{$_SESSION['id']}'

我也读过了 DUPLICATE KEY UPDATE,但这不应该有效,因为它们不止一个表?

我可以轻松创建一个查询,默认情况下在用户注册时将user_id插入到userdetails.user_id中,但查询它会更好。

1 个答案:

答案 0 :(得分:1)

INSERT语句不支持同时向多个表添加记录。为此,您需要一个简单的交易:

BEGIN
INSERT INTO table_a (...)
INSERT INTO table_b (...)
COMMIT

如果插入table_a时出错,则可以回滚到事务的开头。这是SQL标准的处理方式。

如果记录已存在,您可以使用INSERT ... ON DUPLICATE KEY更新记录,或者使用非标准MySQL REPLACE INTO删除任何冲突记录并将其替换为您的数据。