第一个sql命令是:
INSERT INTO table1(post) values('$post');
插入$post后,我想更新另一个表中的列所以我用了
UPDATE table2 SET score='$score' where name='$name';
如何组合这两个命令,或者同时执行它们?
我是mysql的新手:)
以下是我想要的:一个用户去我的网站,发布一个字符串后,该用户的分数将更新
如果对于每个insert
和update
,都可以向数据库中添加触发器。
代码:
delimiter |
CREATE or REPLACE TRIGGER TriggerName
AFTER INSERT
ON table1
BEGIN
UPDATE table2 SET score=score + 1 WHERE name=INSERTED.user_id
# INSERTED is the row added to table1
END;
delimiter ;
如果您在table1
中有用户id字段,这应该会起作用。
否则,如果使用关系表,如user_post
(id,user_id,post_id),则必须声明一个变量来临时存储id
如果您不喜欢从现在起维护两个应用程序(您拥有的一个和您通过添加触发器或函数在数据库中创建的一个),有一个更简单的解决方案:
只需使用一段PHP代码就可以将这些内容添加到数据库中(比如函数或类的方法),只需一个接一个地发送两个查询即可。
为了获得额外的数据一致性,您应该使用一个事务,它只是两个额外的查询,或者适当地使用数据库类。例如,MySQLi具有http://php.net/manual/en/mysqli.begin-transaction.php启动交易,以及http://php.net/manual/en/mysqli.commit.php结束它(或http://php.net/manual/en/mysqli.rollback.php以撤消)。
function writePostWithScore($post, $name, $score) {
// have the mysqli connection object somewhere
$mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
$mysqli->query("INSERT INTO table1 (post) values('".$mysqli->real_escape_string($post)."')");
$mysqli->query("UPDATE table2 SET score='".$mysqli->real_escape_string($score)."' where name='".$mysqli->real_escape_string($name)."'");
$mysqli->commit();
}
我总是创建函数。创建2个函数。一个插入,另一个将更新。打电话给你需要的人。