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

标签 php mysql sql

  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/

相关文章:

PHP 7 C++ 扩展。指定的模块无法找到

php - 组织php项目文件

sql - 如何将连接字符串作为参数发送到 MsBuild 以执行 SQL 模式比较?

php - 如何检测文件是否被包含或直接运行

PHP Nusoap session

mysql - 无法让我的查询在具有 2M 条目的 MySQL 数据库上运行得更快

MySQL数据库设计: User and event table

mysql - 优化 SQL 子查询进行统计

sql - (Hive, SQL) - 如何对列内的字符串列表进行排序?

php - 连接 CSV 文件的每第 n 行