在MySQL表中存储单词出现次数

时间:2016-07-13 20:36:17

标签: mysql

我有一个名为words的表格,其中我想存储单词的键/值对及其出现次数。

我想让count列成为一个自动递增列,因为我想继续添加单词(来自C ++应用程序)并自动增加count。但是,我认为该表会被搜索很多,所以我将word作为主键。我遇到了一个错误,说我不能将非主键设置为自动递增列。

有没有办法正确地执行此操作,以便我可以插入到表中并使数据库句柄递增以及所有这些?

2 个答案:

答案 0 :(得分:0)

您可以将自动增量列保留为主键,并添加仅包含word列的其他索引。如果您按字词搜索,则会使用此索引

答案 1 :(得分:0)

创建一个表来存储单词。 word列是主键。

CREATE TABLE `words` (
  `word` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `count` int(11) NOT NULL DEFAULT '1',
   PRIMARY KEY (`word`)
);

然后在表格中插入您的文字:

INSERT INTO `words`(word) VALUES('car') ON DUPLICATE KEY UPDATE `count`=`count`+1;
INSERT INTO `words`(word) VALUES('plane') ON DUPLICATE KEY UPDATE `count`=`count`+1;
INSERT INTO `words`(word) VALUES('car') ON DUPLICATE KEY UPDATE `count`=`count`+1;

如果表格中不存在该词,nb默认为1(这在表格定义中)。
如果表中已存在该单词,则此单词的nb值将增加1.

在上面的3个插入之后,该表包含:

word  | count  
car   | 2
plane | 1

您可能需要调整:
- 列word的长度
- 字符集和整理

文档:INSERT ... ON DUPLICATE KEY UPDATE Syntax