SQL数据库是否可以支持;仅插入“;模式

SQL数据库是否可以支持;仅插入“;模式,sql,postgresql,insert-update,Sql,Postgresql,Insert Update,最近几年,“仅插入”方法越来越流行。 对于那些使用SQL DB的人,您可能知道,在大量的更新查询中,DB正在锁定行,您开始遇到“瓶颈”。仅插入模式是仅使用插入(无更新)并始终检索数据库中的最新项 我面临的问题是SELECT查询,因为数据库中有一个字段可以用于多个记录,如果我想用它进行查询,我永远不会知道我什么时候获得了上面字段的所有最新的记录(除非我使用的是GROUP,这将是无效的) 方案示例: 假设我有以下计划: CREATE TABLE users ( id SERIAL

最近几年,“仅插入”方法越来越流行。 对于那些使用SQL DB的人,您可能知道,在大量的更新查询中,DB正在锁定行,您开始遇到“瓶颈”。仅插入模式是仅使用插入(无更新)并始终检索数据库中的最新项

我面临的问题是SELECT查询,因为数据库中有一个字段可以用于多个记录,如果我想用它进行查询,我永远不会知道我什么时候获得了上面字段的所有最新的记录(除非我使用的是GROUP,这将是无效的)

方案示例:

假设我有以下计划:

CREATE TABLE users
(
  id         SERIAL    NOT NULL
    CONSTRAINT users_pkey
    PRIMARY KEY,

  first_name VARCHAR(255),
  last_name  VARCHAR(255),
  username   VARCHAR(255),
  email      VARCHAR(255),
  password   VARCHAR(255),
  account_id INTEGER,
  created_at TIMESTAMP NOT NULL
);
现在,假设我有以下与账号1相关的用户(使用account\u id): 1.无名氏 2.耆那教

如果我想在仅插入模式下编辑John Doe姓氏,我将插入一条新记录,当我想检索它时,我将运行以下查询:

SELECT * from users WHERE email='jhon.doe@test.com' ORDER BY created_at Desc limit 1;
问题是如果我想检索所有account 1用户,我需要做什么?如何防止使用group by执行糟糕的查询

下面的查询将返回3条记录,尽管我只有2个用户

SELECT * from users WHERE account_id=1;

您的问题的答案在上是不同的(在Postgres中)。但是,不清楚如何定义用户。我希望有一个
user\u id
,但可能
email
就是为了达到这个目的

查询如下所示:

select distinct on (email) u.*
from users u
where account_id = 1
order by email, created_at desc;

为了提高性能,您需要一个关于
用户的索引(帐户id、电子邮件、在desc创建)

您的问题的答案是
上不同(在Postgres中)。但是,不清楚如何定义用户。我希望有一个
user\u id
,但可能
email
就是为了达到这个目的

查询如下所示:

select distinct on (email) u.*
from users u
where account_id = 1
order by email, created_at desc;

为了提高性能,您需要一个关于
用户的索引(帐户id、电子邮件、在desc创建)

您的代码是Postgres代码,因此我删除了MySQL标记。在您的数据模型中,您需要一个
user\u id
来识别实际用户。“SQL数据库是否可以支持“仅插入”模式?”MySQL或多或少会支持这种模式,因为问题是用MySQL标记的,所以不允许删除和更新。可以使用(PostgreSQL称之为外来数据包装器)要在PostgreSQL中编程自己的表引擎,使PostgreSQL获得MySQL存档引擎的支持,我只需要创建一个纯可插入表。。但现在我想,只需简单地授予选择/插入权限,并确保撤销将要使用它的用户的更新/删除权限..可能重复的我不理解您试图解决的问题。更新锁定行有什么问题?您仍然可以读取该行而不受锁的影响。与偶尔锁定一行相比,“仅插入”表上的查询将有更多的开销您的代码是Postgres代码,因此我删除了MySQL标记。在您的数据模型中,您需要一个
user\u id
来识别实际用户。“SQL数据库是否可以支持“仅插入”模式?”MySQL或多或少会支持这种模式,因为问题是用MySQL标记的,所以不允许删除和更新。可以使用(PostgreSQL称之为外来数据包装器)要在PostgreSQL中编程自己的表引擎,使PostgreSQL获得MySQL存档引擎的支持,我只需要创建一个纯可插入表。。但现在我想,只需简单地授予选择/插入权限,并确保撤销将要使用它的用户的更新/删除权限..可能重复的我不理解您试图解决的问题。更新锁定行有什么问题?您仍然可以读取该行而不受锁的影响。与偶尔锁定一行相比,“仅插入”表上的查询将有更多的开销感谢反馈,users表仅用于示例,您可以假设存在类似于user_id的字段感谢反馈,users表仅用于示例,您可以假设存在类似于user_id的字段