标签: row-modification-time

UPDATE 后触发 UPDATE?

我想制作一个触发器来记录任何更新的时间:

CREATE TRIGGER col_update
AFTER UPDATE ON col
FOR EACH ROW BEGIN
UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id
END
Run Code Online (Sandbox Code Playgroud)

问题是当这个触发器尝试更新updated列时,它也是另一个更新事件,它运行触发器。这将创建一个无限循环,这是行不通的。

如何将更新时间存储在相应的列中?

我希望使用触发器,因为表中有很多列。如果我尝试手动设置更新时间,则需要修改许多查询。

mysql trigger update row-modification-time

14
推荐指数
1
解决办法
4万
查看次数

如何创建在修改行时更新日期字段和时间字段的触发器?

testtable在数据库testbase中创建了一个具有以下结构的表:

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
Run Code Online (Sandbox Code Playgroud)

但是,如何编写触发器,以便它更新已修改(或使用新信息更新)的特定行,并将修改日期记录到expire_date字段中,并将修改时间记录到expire_time字段中?(或者如果这是可能的?)

trigger sql-server-2008 row-modification-time

10
推荐指数
1
解决办法
5万
查看次数

获取列的最后更新时间

此命令给出表的上次更新日期

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'MyDB'
AND TABLE_NAME = 'MyTable'
Run Code Online (Sandbox Code Playgroud)

但我想找到表的特定列的上次更新时间。我不能使用触发器,因为我想知道系统表中特定列的上次更新时间。

我希望我能很好地解释我的问题。

mysql information-schema row-modification-time

8
推荐指数
1
解决办法
4万
查看次数

PostgreSQL:使用自定义列自动更新 updated_at

以前,我会将多个表合并为一个并返回结果,但在许多表中我有相同的列名。这就是为什么我决定用表名作为列名的前缀。但这打破了我必须自动更新我的updated_at专栏的触发器。

这是我的功能:

CREATE OR REPLACE FUNCTION update_updated_at()
  RETURNS TRIGGER AS $$
  BEGIN
      NEW.updated_at = now();
      RETURN NEW;
  END;
  $$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

我会添加一个触发器,如:

CREATE TRIGGER update_users_updated_at
  BEFORE UPDATE ON users
  FOR EACH ROW EXECUTE PROCEDURE update_updated_at();
Run Code Online (Sandbox Code Playgroud)

但是现在我的专栏被命名了users_updated_at,这不起作用。我的问题是有什么方法可以将列名传递给触发器并更新传递的列,还是有其他我不知道的方法?

postgresql trigger plpgsql functions row-modification-time

8
推荐指数
1
解决办法
2万
查看次数

在 PostgreSQL 中的所有 last_modified 列上创建触发器

在 PostgreSQL 9.5 中,我有表格中的列

prefix_last_modified timestamp without time zone NOT NULL DEFAULT  (clock_timestamp() AT TIME ZONE 'UTC')
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来设置在每次更新行时自动更新的最后修改的值,我发现这篇定义函数的好帖子

CREATE OR REPLACE FUNCTION update_modified_column() 
RETURNS TRIGGER AS $$
BEGIN
    NEW.modified = now();
    RETURN NEW; 
END;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

现在,我想知道是否有任何方法可以将列名传递给 PostgreSQL 函数并将其执行到NEW行?例如

CREATE OR REPLACE FUNCTION update_modified_column(varchar column)   
    RETURNS TRIGGER AS $$
    BEGIN
        NEW.column = now();
        RETURN NEW; 
    END;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

postgresql trigger row-modification-time

7
推荐指数
1
解决办法
6300
查看次数

MySQL 5.5.21 ON UPDATE CURRENT_TIMESTAMP 不正确

正如标题所说,我在“ON UPDATE CURRENT_TIMESTAMP”方面遇到了一些问题。这是表的 SQL 定义:

CREATE TABLE `judgements` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `parent_id` bigint(20) NOT NULL DEFAULT '0',
  `entry_id` bigint(20) NOT NULL,
  `group_id` bigint(20) NOT NULL,
  `comments` longtext,
  `rating` int(11) DEFAULT '0',
  `status` int(11) NOT NULL DEFAULT '1',
  `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`entry_id`,`group_id`),
  KEY `group_id` (`group_id`),
  KEY `entry_id` (`entry_id`),
  KEY `status_id` (`status`),
  CONSTRAINT `entry_id` FOREIGN KEY (`entry_id`) REFERENCES `entries` (`id`),
  CONSTRAINT `group_id` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`),
  CONSTRAINT `status_id` …
Run Code Online (Sandbox Code Playgroud)

mysql timestamp row-modification-time

6
推荐指数
1
解决办法
7150
查看次数

如何在 AFTER UPDATE 触发器中仅引用受影响的行

我有这张桌子:

在此处输入图片说明

我正在尝试创建一个更新触发器,每当对or列执行更新时,该触发器就会更新last_updated_on = GETDATE()last_updated_by = SYSTEM_USER列。step_numberstep_name

我开始创建它

ALTER TRIGGER tr_app_bread_crumbs_afterupdate
ON [dbo].[app_bread_crumbs]
AFTER UPDATE
AS
BEGIN 
    UPDATE [dbo].[app_bread_crumbs]
    SET last_updated_by = SYSTEM_USER,
    last_updated_on = GETDATE()
END
Run Code Online (Sandbox Code Playgroud)

但这将一次更新所有行。我正在尝试弄清楚如何指定仅更新last_updated_onlast_updated_by由正在更新的特定行的触发器。

例如,如果他们更新:

UPDATE [dbo].[app_bread_crumbs]
    SET step_name = 'DAMAGE' WHERE step_number = 1
Run Code Online (Sandbox Code Playgroud)

触发器应该只更新第一行

trigger sql-server t-sql sql-server-2012 row-modification-time

6
推荐指数
2
解决办法
4万
查看次数

如何在没有递归的情况下使用触发器更新同一行上的列?

SQL Server 2012。

每当我的表中的记录发生更改时,我都需要使用当前日期和时间更新列 [LastUpdated]。目前我有:

CREATE TRIGGER Trig_LastUpdated ON Contact AFTER UPDATE
AS
SET NOCOUNT ON

UPDATE ct
SET LastUpdated = GETDATE()
FROM Contact ct
INNER JOIN Inserted i
    ON ct.IDContact = i.IDContact
Run Code Online (Sandbox Code Playgroud)

但这是递归的,我不希望这样,会导致死锁和其他奇怪的事情。我无法全局关闭递归触发器。我看到 INSTEAD OF 触发器是非递归的,但是如果我这样做,我是否必须检查 Inserted 中的所有其他列以查看它是否已更新,或者 SQL Server 是否会为我处理?做到这一点的最佳方法是什么?

trigger sql-server deadlock sql-server-2012 row-modification-time

6
推荐指数
2
解决办法
2万
查看次数

仅导出上个月修改的行(用户定义的日期)

我在问是否可以在 MySQL 中仅导出在一段时间内修改的行,例如在过去一个月中修改的行,如果可能,如何?

mysql mysqldump backup mysql-5.5 row-modification-time

5
推荐指数
1
解决办法
5668
查看次数

在更新时间戳上添加列

我想更改一个表以包含modifiedcreated列。但是,我在添加modified列时遇到了问题。我收到以下错误:

SQL 错误:ORA-00907:缺少右括号 00907. 00000 - “缺少右括号”

我正在阅读此 Oracle 文档(http://docs.oracle.com/cd/E17952_01/refman-5.5-en/timestamp-initialization.html)以获取有关如何正确编写ON UPDATE语法的示例

这是我的 SQL。

ALTER TABLE FOOBAR
ADD (
  created TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
  modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)

为什么会出现缺少右括号的错误?

oracle-11g row-modification-time

4
推荐指数
1
解决办法
2万
查看次数

插入时触发将新记录中的列更新为 CURRENT_TIMESTAMP

好的,所以我试图在最初插入记录时将特定记录中的列更新为 CURRENT_TIMESTAMP。这就是我所拥有的,否则我就迷路了。

CREATE TRIGGER dbo.TrgUpnInsert
  ON [CNLH Security Authentication].dbo.DateTimestamp
    AFTER INSERT, 
    INSERT INTO [CNLH Security Authentication].dbo.EntranceInformation (DateTimestamp) Values (CURRENT_TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)

trigger sql-server t-sql timestamp row-modification-time

2
推荐指数
1
解决办法
4878
查看次数