gpt4 book ai didi

php - 更新表 当表分组并使用 MySQL 删除同一行时

转载 作者:行者123 更新时间:2023-11-29 21:52:17 24 4
gpt4 key购买 nike

  1. 第一个问题两栏create table test (word varchar(255),value int);

当我们有相同的 word 时,我如何更新表

例如:<a,1> ,<b,1> , <a,1>将添加新行 <a,2>并删除两个 <a,1>

2.第二个问题

如果表有数百对,并且表仍在分组(仍在插入),如何加快速度,我可以每 1 小时检查一次吗?并执行更新步骤?

MySQL 或 PHP 代码

最佳答案

如果目标是拥有一个具有唯一word 的表,那么我首先不允许插入具有相同单词值的行,而只是更新现有行。

我会强制 word 的唯一性列通过添加 UNIQUE KEY 或 PRIMARY KEY 约束。例如:

  CREATE UNIQUE INDEX `test_ux1` ON `test` (`word`) ;

如果我想禁止 word 为 NULL 值,我会添加 NOT NULL到列定义。例如:

  ALTER TABLE `test` MODIFY `word` VARCHAR(255) NOT NULL ;  

或者,我可以定义 word成为表的主键,而不是唯一键。这将强制唯一性并不允许 NULL 值。

<小时/>

这里演示了如何插入和更新行。

我们可以首先尝试插入一行。在本例中,该行的 word 的值为“a”。栏目:

  INSERT INTO `test` (`word`, `value`) VALUES ('a','1') ; 

如果语句成功,我们就插入了一行。但在word上有主键或唯一键列,这将引发“重复键”错误,因为表中已存在值为“a”的行。

当这种情况发生时,我们知道我们需要对现有行执行更新。例如:

  UPDATE `test` t 
SET t.`value` = IFNULL(t.`value`,0) + '1'
WHERE t.word = 'a'

MySQL 提供了一个扩展(INSERT ... ON DUPLICATE KEY UPDATE 语句),它将在单个语句中执行相同的操作:

  INSERT INTO `test` (`word`,`value`) VALUES ('a','1')
ON DUPLICATE KEY
UPDATE `value` = IFNULL(`value`,0) + VALUES(`value`)
<小时/>

这种设计似乎比执行插入、插入稍后将通过删除操作撤消的行要高效得多。我希望只包含我需要的行,而不添加稍后需要查询和删除的额外行。

关于php - 更新表 当表分组并使用 MySQL 删除同一行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511807/

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