为什么在值不存在时不添加新行?

qvsjd97n  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(265)

我有一张table可以数风景:

post_views table
    ___________________________________
   |        |             |           |
   |   id   |   post_id   |   views   |
   |________|_____________|___________|

在哪里 post_ididposts 表格:

posts table
    __________________________________________
   |        |           |          |         |
   |   id   |   title   |   text   |    ..   |
   |________|___________|__________|_________|

每个 idposts 中应该有一行 post_views table,所以 id 是表和视图中的主视图 post_id 是独一无二的。
我想增加 views 如果 post_id 存在,否则插入新的 post_id .
所以我使用这个查询:

INSERT INTO post_views (`post_id`, `views`) VALUES (1, 1) ON DUPLICATE KEY UPDATE `views` = `views`+1

创建了一个新行 id = 0:

____________________________________
|          |             |           |
|    id    |   post_id   |   views   |
|__________|_____________|___________|
|          |             |           |
|    0     |     1       |    1      |
|          |             |           |
|__________|_____________|___________|

每当我用一个新的 post_id :

INSERT INTO post_views (`post_id`, `views`) VALUES (2, 1) ON DUPLICATE KEY UPDATE `views` = `views`+1

同一现有行中的视图增加,新的 post_id 未添加:

____________________________________
|          |             |           |
|    id    |   post_id   |   views   |
|__________|_____________|___________|
|          |             |           |
|    0     |     1       |    2      |
|          |             |           |
|__________|_____________|___________|
g6ll5ycj

g6ll5ycj1#

您尚未申报 id 成为 auto_increment . 您的表声明应该如下所示:

create table post_views (
    id int auto_increment primary key,
    post_id int not null,
    . . . 
);

当你离开房间的时候 id 在insert之外,它将获得一个默认值。与 auto_increment 默认值为递增 id .
你可能已经指定了 idnot null (或 primary key )默认为 0 . 这对于所有插入都是正确的,因此所有尝试的插入都具有相同的值。这个 auto_increment 应该解决这个问题。

相关问题