Mysql SQL更新语句语法

Mysql SQL更新语句语法,mysql,Mysql,我有两个表,我想使用SQLUPDATE语句更新它们。这两个表包含一个名为“oak”和“exp”的行,这是我要更新的值。到目前为止,我最好的猜测是: 'UPDATE `items_woods`, `skills_woodcutting` SET `oak`=`oak`+1, `exp`=`exp`+13 WHERE `id`=?' 但是,没有一个值保存在数据库中。提前谢谢 更新: if ($stmt = $mysqli->prepare(' BEGIN TRANSACTI

我有两个表,我想使用SQLUPDATE语句更新它们。这两个表包含一个名为“oak”和“exp”的行,这是我要更新的值。到目前为止,我最好的猜测是:

'UPDATE `items_woods`, `skills_woodcutting` SET `oak`=`oak`+1, `exp`=`exp`+13 WHERE `id`=?'
但是,没有一个值保存在数据库中。提前谢谢

更新:

if ($stmt = $mysqli->prepare('

        BEGIN TRANSACTION

        UPDATE items_woods
        SET items_woods.oak = ´1´
        FROM items_woods T1, skills_woodcutting T2
        WHERE T1.id = T2.id 
        and T1.id = ´?´

        UPDATE skills_woodcutting
        SET skills_woodcutting.exp = ´1´
        FROM items_woods T1, skills_woodcutting T2
        WHERE T1.id = T2.id
        and T1.id = ´?´

        COMMIT


        ')) {

因为有两个表,所以必须使用两个单独的语句更新它们。可以将这些事务设置为单个事务,并且只有在两个事务都成功后才提交这两个事务

我不确定您使用的是什么datbase,但一般做法是:

commit   (start the transaction)
update items_woods set oak = oak+1 where id = ?
update skills_woodcutting set exp=exp+13 where id = ?
commit   (complete the transaction)

SQL更新,一次只更新一个表


使用带有两个update语句的事务

您的
WHERE
子句是否确实找到了要更新的内容?如果要更新2,请使用联接tables@MikeW是的,我正在使用准备好的陈述,并且问号设置为1。我测试了update语句,只更新了一个值,结果它成功了。@Mihai我该如何在我的示例中实现它?感谢SQL可能的重复错误,请使用BEGIN TRANSACTION,而不是COMMIT来启动事务。无论如何,这是一个DuplPict等式在ORACLE中,您使用提交或回滚来开始事务。正如我在文章中提到的,原始海报没有指定数据库。谢谢。第一次提交只是清空已经运行(隐式或命名)的事务。然后,一个新的事务会在下一条语句中自动启动。COMMIT实际上并不会启动正确的事务(ANSI或Oracle),COMMIT会有效地清除未受限制的事务。它通常用作新事务的起点。回滚具有相同的效果,但当然会反转任何未限制的工作。Oracle应用程序广泛使用此技术。所以我的SQL并没有错,只是另一种做与begin_事务相同事情的方法。干杯。虽然它对你有用,但它不是一个好的编程实践。强制接受并关闭当前交易,而不进行检查?您的示例代码将命令标记为它启动了一个新事务,而不是。它关闭当前事务。下一个发出的命令将启动一个新的隐式事务。您能帮我处理上面的代码吗?我想我确实做了另一个线程中描述的事情,但它仍然不起作用。谢谢。@user3287771它做了什么吗?你收到错误信息了吗?你有两个?标记,需要传递两个参数(相同的值)。如果语句没有通过,它只返回我自己创建的错误消息。这两个问号应该都等于1,所以我想应该可以。