【问题标题】:is this possible? adding 4 new columns: createdDate,modifiedDate,createdBy,modifiedBy?这可能吗?添加 4 个新列:createdDate、modifiedDate、createdBy、modifiedBy?
【发布时间】:2020-05-29 07:15:15
【问题描述】:

我正在使用 sql 开发人员。我有一张桌子。我想添加我知道该怎么做的那 4 个新列,但我希望用户在输入新行或编辑现有行时不输入这些值,我希望自动填充这些值

例如如果用户输入

insert into tableName values (val1,val2,val3)

那么表格将在新行中包含 7 个新值:

val1,val2,val3,createdDate,modifiedDate,createdBy,modifiedBy

当用户修改现有行中的值时相同

update TAbleName set val1 = newVal where id = id1

然后该行中的“modifiedDate”和“modifiedBy”字段将被自动修改

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    部分地,列的默认值可以做到这一点(对于创建日期和这样做的用户);要进行修改,请使用触发器。

    这是一个例子:

    SQL> create table test (id number, name varchar2(20));
    
    Table created.
    
    SQL> alter table test add
      2    (created_date    date           default sysdate,
      3     created_by      varchar2(30)   default user,
      4     modified_date   date,
      5     modified_by     varchar2(30)
      6    );
    
    Table altered.
    
    SQL> insert into test (id, name) values (1, 'Little');
    
    1 row created.
    
    SQL> select * From test;
    
            ID NAME                 CREATED_DATE        CREATED_BY MODIFIED_DATE       MODIFIED_B
    ---------- -------------------- ------------------- ---------- ------------------- ----------
             1 Little               13.02.2020 22:23:17 SCOTT
    

    稍后更新一行 - 没有任何改变(对于 createdmodified 列):

    SQL> update test set name = 'Foot' where id = 1;
    
    1 row updated.
    
    SQL> select * From test;
    
            ID NAME                 CREATED_DATE        CREATED_BY MODIFIED_DATE       MODIFIED_B
    ---------- -------------------- ------------------- ---------- ------------------- ----------
             1 Foot                 13.02.2020 22:23:17 SCOTT
    

    让我们创建一个触发器。很简单:

    SQL> create or replace trigger trg_testmod_bu
      2    before update on test
      3    for each row
      4  begin
      5    :new.modified_date := sysdate;
      6    :new.modified_by   := user;
      7  end;
      8  /
    
    Trigger created.
    
    SQL> update test set name = 'Bigfoot' where id = 1;
    
    1 row updated.
    
    SQL> select * From test;
    
            ID NAME                 CREATED_DATE        CREATED_BY MODIFIED_DATE       MODIFIED_B
    ---------- -------------------- ------------------- ---------- ------------------- ----------
             1 Bigfoot              13.02.2020 22:23:17 SCOTT      13.02.2020 22:26:38 SCOTT
    

    对;触发器更新了两个 modified 列。

    【讨论】:

      【解决方案2】:

      你使用什么数据库?

      对于添加新行时的自动填充,您需要设置“默认绑定”又名“默认字段”

      ALTER TABLE YourTable 
          ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
      

      对于更新,您需要触发编辑列

      How to: Create trigger for auto update modified date with SQL Server 2008

      【讨论】:

      • 我无法评论它是否适用于 MS SQL Server(因为我不知道),但是 - 由于问题带有 Oracle 标记,因此不适用于 Oracle .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2011-03-02
      • 2014-12-04
      相关资源
      最近更新 更多