相关疑难解决方法(0)

MySQL:@variable与变量.有什么不同?

在我发布的另一个问题中有人告诉我,之间有区别:

@variable
Run Code Online (Sandbox Code Playgroud)

和:

variable
Run Code Online (Sandbox Code Playgroud)

在MySQL中.他还提到了MSSQL如何具有批量作用域以及MySQL具有会话作用域.有人可以为我详细说明这个吗?

mysql sql variables

488
推荐指数
3
解决办法
42万
查看次数

MySQL - 选择最后插入行最简单的方法

我只需要选择条件指定的最后输入的行,例如:

SELECT ID from bugs WHERE user=Me
Run Code Online (Sandbox Code Playgroud)

我只需要返回用户'我'输入的最后一个ID.有一个简单的方法吗?谢谢.

mysql select

26
推荐指数
6
解决办法
16万
查看次数

将+1添加到字段(点击计数器)

如何在c_request字段中添加+1.每次我做插入我想在当前数字上添加1(例如点击计数器)

mysql_query("INSERT INTO ed_names (com_id, c_date, c_time, c_type, c_request, c_by)
        VALUES ($id, CURRENT_DATE, CURRENT_TIME, '.($type == 'normal' ? 1 : 2).',0,$user)");     

$rid = mysql_insert_id();
Run Code Online (Sandbox Code Playgroud)

mysql

17
推荐指数
1
解决办法
3万
查看次数

选择最后受影响的行

我已根据具体情况更新了我的记录,之后我想知道受影响行中的ID.

$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'");
Run Code Online (Sandbox Code Playgroud)

现在执行此查询后,我想知道受影响的行.

php select mysqli

8
推荐指数
1
解决办法
178
查看次数

如何获取MySQL和Go中最后插入的行的ID?

如何使用此技巧:如何获取MySQL中最后更新的行的ID?在Go(golang)中?

我正在使用go-sql-driver。它应该与这两个查询一起使用,但是如何在Go中执行呢?

INSERT INTO table (unique_id) VALUES ("test")
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);

SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

mysql go

8
推荐指数
1
解决办法
2610
查看次数

选择受更新影响的行

如何UPDATE在MySQL中获取受SQL 语句影响的确切行?

我在许多计算机上有许多客户端可以随时根据WHERE子句更新同一个表中的行,并且每个客户端需要在另一个系统中为它们影响的每一行执行某些操作,因此获取受影响项的列表必须准确并且不容易受到竞争条件的影响.

一些数据库支持UPDATE ... OUTPUT UPDATED.id WHERE ...例如SQL Server.

你怎么能在MySQL中做这个原子UPDATE/ SELECT

(我已经看到了做第SELECT一个然后使用ID作为一个IN子句的建议UPDATE.但是另一个客户端可能运行相同SELECT并检索相同的行,而第一个客户端排队UPDATE等等?)

mysql sql atomic

6
推荐指数
1
解决办法
2622
查看次数

如果存在则更新一行,否则插入

我有一张像'匹配'的桌子

id|user1|user2|paired
--+-----+-----+--------+
1 |U_1  |null |false
Run Code Online (Sandbox Code Playgroud)

我需要将新用户'U_2'与配对= false的记录匹配,或者如果未找到未配对的行,则在表中创建新条目.

此数据库连接到多个用户可能尝试配对的服务器,因此我需要找到最快的解决方案,使其快速,因此它不会长时间锁定表.

我想出的解决方案是

int matchId = select id from match where ((user1 != 'U_2') AND (paired = false));

if(matchId > 0)
then
   update table match set user2 = 'U_2' where id = matchId; 
else
   insert new row.
Run Code Online (Sandbox Code Playgroud)

请建议一个更好的方法.

提前致谢.

mysql sql

6
推荐指数
1
解决办法
981
查看次数

在高并行连接上仅选择一个表行

我正在寻找一种方法为一个线程明确选择一个表行.我编写了一个爬虫程序,它可以处理大约50个并行进程.每个进程都必须从表中取出一行并进行处理.

CREATE TABLE `crawler_queue` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `url` text NOT NULL,
 `class_id` tinyint(3) unsigned NOT NULL,
 `server_id` tinyint(3) unsigned NOT NULL,
 `proc_id` mediumint(8) unsigned NOT NULL,
 `prio` tinyint(3) unsigned NOT NULL,
 `inserted` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 KEY `proc_id` (`proc_id`),
 KEY `app_id` (`app_id`),
 KEY `crawler` (`class_id`,`prio`,`proc_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

现在我的流程执行以下操作:

  • 启动数据库事务
  • 选择喜欢 SELECT * FROM crawler_queue WHERE class_id=2 AND prio=20 AND proc_id=0 ORDER BY id LIMIT 1 FOR UPDATE
  • 然后使用更新此行 UPDATE crawler_queue …

mysql parallel-processing mysqli locking message-queue

5
推荐指数
1
解决办法
1091
查看次数

获取 PDO 中更新行的 id

我使用 PDO 更新了数据库中的一行。

 $stmt = $db->prepare("UPDATE product SET price=? WHERE seller=?");
             $stmt->execute(array(456,"Apple"));
Run Code Online (Sandbox Code Playgroud)

这对我不起作用

$updated_id = $db->lastInsertId();
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得该更新行的 id。

php mysql pdo

5
推荐指数
1
解决办法
9656
查看次数

Mysql 中最后更新的行 ID

目前我正在处理一个项目。我需要找到上次更新的 id。如何在 mysql 中获取上次更新的行 ID?请任何人帮忙?

mysql

3
推荐指数
1
解决办法
2万
查看次数

SQL 返回值 - 怎么做?

我们都知道,在编程语言中,返回值是最基本的东西。但是当涉及到数据库时,我们只是不期望任何返回值。这是一个错误的概念,因为它将我们的数据库简化为黑匣子。有时,了解哪些行受到更新的影响可能是件好事。

那么我们如何构建在插入或更新后返回值的数据库呢?(不在选择之后,因为这本身总是返回一个值)

您能给我一些例如 MySQL 的示例代码,例如包含更新行的主键的列表吗?

mysql sql black-box return-value

0
推荐指数
1
解决办法
4551
查看次数

PHP、MySQL、PDO - 从 UPDATE 查询中获取结果?

我正在更新表中的一行,并尝试根据此 SO answer返回更新后的行。

我的代码如下:

$sql = "SET @update_id := '';
        UPDATE testing SET status='1', id=(SELECT @update_id:=id)
        WHERE status='0' LIMIT 1; 
        SELECT @update_id;";

$db->beginTransaction();
try{
    $stmt = $db->prepare($sql);
    $stmt->execute();

    echo count($stmt->fetchAll());

    $db->commit();
}catch(Exception $e){
    echo $e->getMessage();
    exit();
}
Run Code Online (Sandbox Code Playgroud)

但我总是收到以下错误

SQLSTATE[HY000]:一般错误

$stmt->fetchAll()根据this SO answer,这似乎是由于。如果我取出那条线,该行会适当更新。

那么,如何使用 PDO 运行多查询语句(多语句查询!?),并从SELECT?

编辑 1

不要需要更新行。我需要行的实际ID

表模式

  id   |   someCol  |  status
 ----- |   -------  |  ------
   1   |     123    |    0
   2   |     456 …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

-2
推荐指数
2
解决办法
2万
查看次数