php - 将数据移动到新表并添加新数据

标签 php mysql sql

我正在尝试通过一个 SQL 查询(针对 MySQL)实现以下目标:

我想将一行从一个表移动到另一个表,同时更改它的两个值。

我可以在一次查询中实现吗? 我现在的 PHP 代码:

$value1a = "Old value for this column";
$value1b = "New value for this column";
$value2 = "value2";

$sql = "INSERT INTO table2 (date, value1b, value2, value3, value4)
            SELECT (date, value1a, value2, value3, value4)
            FROM table1
            WHERE value1a=? AND value2=?
        DELETE FROM table1
            WHERE value1a=? AND value2=?";
$stmt = $DB->prepare($sql);
$stmt->execute(array($value1a, $value2, $value1a, $value2));

value2、value3 和 value4 保持不变。 “日期”应更改为当前日期(我之前为此使用了 SQL 函数“NOW()”)。 “value1b”是一个全新的值,具有不同的列名但具有相同的数据类型。

这可能就是答案吗?

$sql = "INSERT INTO table2 (date, value1b, value2, value3)
            SELECT (value3, value4)
            FROM table1
            WHERE value1a=? AND value2=?
        VALUES (NOW(), ?, value2, value3, value4)
        DELETE FROM table1
            WHERE value1a=? AND value2=?";
$stmt = $DB->prepare($sql);
$stmt->execute(array($value1a, $value2, $value1b, $value1a, $value2));

最佳答案

您的第一次尝试非常接近,但您只想稍微更改 SELECT 部分。您可以选择值的函数而不仅仅是原始值,因此您的 SELECT 部分看起来像

SELECT (NOW(), value1a, value2, value3, value4) FROM table1 ...

不过,这仍然不是一个完整的 SQL 语句,因为 DELETE 行是一个单独的语句。您无法一次完成 INSERT 和 DELETE。

为什么要在一条语句中完成呢?是因为你想让这两件事同时发生吗?如果是这样,您应该查看交易:这就是它们的用途。开始交易;做你的插入;做你的删除;然后提交事务。任何其他正在查看数据库的人都会看到整个事情以原子方式完成(换句话说,没有人会看到数据库中插入了行但另一行未被删除)。

关于php - 将数据移动到新表并添加新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25367317/

相关文章:

mysql - 使用 convert_tz 进行日期时间比较

mysql - mongo 是否适合与 MySQL 一起使用?

SQL/Postgresql 如何对列进行分组,但根据某些条件查找另一列的平均值

mysql - 需要微调我在 varchar 列上有索引的 mysql 查询

java - SQL\HQL 查询存储库

php - 为什么 PHP 中的函数和方法这么大?

PHP 未从我的服务器文件夹中获取图像

mysql - SQL 排序依据和 SQL 日期

php - PDO::ATTR_EMULATE_PREPARES 问题

php - 工作流程 - 数据库设计