gpt4 book ai didi

mysql - 如何在调用mysql后立即从mysql中删除一行?

转载 作者:行者123 更新时间:2023-11-29 08:29:11 25 4
gpt4 key购买 nike

基本上,我有一个 mysql 数据库,每次获取一行时,我都想从数据库中删除它(在读取其信息后)。

我知道我可以做类似的事情

$result = mysql_query(" SELECT <some row> FROM table ");
$row = mysql_fetch_array($result);
$id = $row["id"];

mysqli_query(" DELETE FROM table WHERE id=$id");

但现在我似乎有两个疑问。是否有一个命令告诉 mysql 我希望在它给我信息后立即删除该行?我想这会节省时间和资源。

在我看来,它看起来像

$result = mysql_query(" SELECT <some row> FROM table THEN DELETE ");

编辑附加信息:我希望在删除行后使用所选信息。简而言之,我只希望在任何给定时间都存在一个信息实例;就好像我只是“移动”信息的物理副本,这样当它被放置在设备/你拥有的设备上时,它就不再出现在表中,因为只有一个副本。

抱歉,如果我对 mysql 的理解很粗糙——我对它还很陌生:P

最佳答案

我不知道你为什么需要它,但你可以使用存储过程:

DELIMITER $$
CREATE PROCEDURE select_and_delete(IN aid INT)
BEGIN
SELECT * FROM table1 WHERE id = aid;
DELETE FROM table1 WHERE id = aid;
END$$
DELIMITER ;

这里是SQLFiddle 演示。

mysql_* 扩展已弃用,因此请使用准备好的语句和 mysqliPDO .

您使用 PDO 的 php 代码可能如下所示

$id = 1;

try {
$db = new PDO('mysql:host=localhost;dbname=test;charset=UTF8', 'user', 'userpwd');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$query = $db->prepare("CALL select_and_delete(?)");
$query->execute(array($id));
$result = $query->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo "Exception: " .$e->getMessage();
$result = false;
}
$query = null;
$db = null;
//do whatever you need to do with your resultset
var_dump($result);

遵循 SQL Fiddle 示例中提供的相当简化的表结构(只有列 id),如果您使用 $id=1 调用它,您将获取$结果:

array(1) {
[0]=>
array(1) {
["id"]=>
int(1)
}
}

关于mysql - 如何在调用mysql后立即从mysql中删除一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com