Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 自动更新数据库中的记录_Sql_Postgresql - Fatal编程技术网

Sql 自动更新数据库中的记录

Sql 自动更新数据库中的记录,sql,postgresql,Sql,Postgresql,让我在这里描述一下我的情况 我有一个有多条记录的表,其中的名称是相同的,因为它将是同一个人每天更新的记录 现在,我正试图找到最简单的方法来更新所有的名字 名称将被更新(TestName->RealName) 我希望此更改应用于具有相同名称的所有记录,在本例中为“TestName” 我可以做一个单一的查询,但我试图找到是否有一个自动的方法来正确地做这件事 我一直在尝试使用触发器,但在大多数情况下,我以一个无限循环结束,因为我试图更新表,触发器实际上绑定到该表,所以它调用另一个更新,等等 我不需要

让我在这里描述一下我的情况

我有一个有多条记录的表,其中的名称是相同的,因为它将是同一个人每天更新的记录

现在,我正试图找到最简单的方法来更新所有的名字

  • 名称将被更新(TestName->RealName)
  • 我希望此更改应用于具有相同名称的所有记录,在本例中为“TestName”
  • 我可以做一个单一的查询,但我试图找到是否有一个自动的方法来正确地做这件事

    我一直在尝试使用触发器,但在大多数情况下,我以一个无限循环结束,因为我试图更新表,触发器实际上绑定到该表,所以它调用另一个更新,等等


    我不需要精确的解决方案,请给我一些关于如何实现的线索。

    使用触发器中的函数可以简单地解决问题,例如:

    create trigger before_update_on_my_table
    before update on my_table
    for each row 
    when (pg_trigger_depth() = 0) -- this prevents recursion
    execute procedure before_update_on_my_table();
    
    然而,这张桌子似乎设计得很糟糕。它不应该包含名称。创建一个具有名称的表(例如
    user\u name
    ),并在旧表中存储对新表的引用,例如:

    create table user_name(id serial primary key, name text);
    
    create table my_table(id serial primary key, user_id int references user_name(id));
    

    您可以在postgresql中使用事件触发器

    不确定我是否正确地理解了您的问题,但这个简单的更新应该可以工作:
    更新我的表集名称='RealName',其中name='TestName'
    是的,我知道,但是有没有办法在SQL级别自动完成这一操作?e、 g触发器还是其他机制?问题还不清楚,我们不知道你所说的自动方式是什么意思。如果您想自动执行某些操作,则必须定义触发此更新的事件。如果您有导致无限循环的触发器,请向我们展示代码!我们不是读心术的人,你的书面描述也不清楚。