在我发布的另一个问题中有人告诉我,之间有区别:
@variable
Run Code Online (Sandbox Code Playgroud)
和:
variable
Run Code Online (Sandbox Code Playgroud)
在MySQL中.他还提到了MSSQL如何具有批量作用域以及MySQL具有会话作用域.有人可以为我详细说明这个吗?
我只需要选择条件指定的最后输入的行,例如:
SELECT ID from bugs WHERE user=Me
Run Code Online (Sandbox Code Playgroud)
我只需要返回用户'我'输入的最后一个ID.有一个简单的方法吗?谢谢.
如何在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) 我已根据具体情况更新了我的记录,之后我想知道受影响行中的ID.
$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'");
Run Code Online (Sandbox Code Playgroud)
现在执行此查询后,我想知道受影响的行.
如何使用此技巧:如何获取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) 如何UPDATE
在MySQL中获取受SQL 语句影响的确切行?
我在许多计算机上有许多客户端可以随时根据WHERE
子句更新同一个表中的行,并且每个客户端需要在另一个系统中为它们影响的每一行执行某些操作,因此获取受影响项的列表必须准确并且不容易受到竞争条件的影响.
一些数据库支持UPDATE ... OUTPUT UPDATED.id WHERE ...
例如SQL Server.
你怎么能在MySQL中做这个原子UPDATE
/ SELECT
?
(我已经看到了做第SELECT
一个然后使用ID作为一个IN
子句的建议UPDATE
.但是另一个客户端可能运行相同SELECT
并检索相同的行,而第一个客户端排队UPDATE
等等?)
我有一张像'匹配'的桌子
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)
请建议一个更好的方法.
提前致谢.
我正在寻找一种方法为一个线程明确选择一个表行.我编写了一个爬虫程序,它可以处理大约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 …
我使用 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。
我们都知道,在编程语言中,返回值是最基本的东西。但是当涉及到数据库时,我们只是不期望任何返回值。这是一个错误的概念,因为它将我们的数据库简化为黑匣子。有时,了解哪些行受到更新的影响可能是件好事。
那么我们如何构建在插入或更新后返回值的数据库呢?(不在选择之后,因为这本身总是返回一个值)
您能给我一些例如 MySQL 的示例代码,例如包含更新行的主键的列表吗?
我正在更新表中的一行,并尝试根据此 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)