2015-11-04 57 views
0
  1. 第一个问题,在同一行 两列create table test (word varchar(255),value int);

我怎么可以更新表的时候,我们有相同的word更新表时,表是分组并删除使用MySQL

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

2.第二个问题

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

MySQL或PHP代码

+0

您的问题和标签不清楚! 如果您的表格有:''。你会添加''然后删除什么? –

+0

@NguyễnHảiTriều删除所有

回答

0

如果我们的目标是有一个有word独特值,那么我不会允许连续的插入与摆在首位的同一个字值的表,而只是更新现有的行。

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

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

如果我想禁止NULL值word,我想补充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。例如:

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`) 

这种设计似乎比执行插入更有效,插入随后将通过删除操作撤消的行。我宁愿只有我需要的行,也不要添加额外的行,以后需要查询和删除。