
举个例子吧:
如:
记录表A的更新记录,
首先建立一个表:表AUpDataTemp
表结构和表A相同,
然后后面要多加1列,列名就取:DataType 吧,类型为 bit
1为更新后的数据(新数据),0为更新前的数据(旧数据):
触发器代码如下:
create trigger 表A_UPDATA_TR
on 表A
for update
as
insert into 表AUpDataTemp select ,1 from inserted
insert into 表AUpDataTemp select ,0 from deleted
当然,插入和删除数据更简单,插入只有新数据,删除只有旧数据
以上是MS-SQL,ORACLE只有触发器头格式不一样,思路没问题
余额可以单独用一个余额记录表,这样如果要查询每次消费记录的时候,也能查出来每次消费后还有多少余额。余额记录表里面主要是三个字段:用户账号、每次消费后的余额、时间点。
CREATE TABLE account
(
id integer NOT NULL DEFAULT nextval('trade_id_seq'::regclass),
no character varying(10) NOT NULL, -- 账号
balance money NOT NULL DEFAULT 000, -- 余额
datetime timestamp without time zone NOT NULL DEFAULT (now())::timestamp(0) without time zone,
CONSTRAINT account_pkey PRIMARY KEY (id)
)
通过每次的余额变化就知道每次消费后的余额情况
select acc, (select sum(balance)+accbalance from account as ac where acid < accid) as profit from account as acc;
id | no | balance | datetime | profit
----+------+----------+---------------------+---------
1 | 1000 | $000 | 2013-10-09 10:51:10 |
2 | 1000 | $1260 | 2013-10-09 10:51:22 | $1260
4 | 1000 | $1680 | 2013-10-09 10:51:42 | $2940
5 | 1000 | $10000 | 2013-10-09 10:51:49 | $12940
6 | 1000 | $20000 | 2013-10-09 10:56:35 | $32940
7 | 1000 | $5045 | 2013-10-09 10:57:23 | $37985
8 | 1000 | $7550 | 2013-10-09 10:57:31 | $45535
9 | 1000 | -$5530 | 2013-10-09 10:59:28 | $40005
10 | 1000 | -$20000 | 2013-10-09 10:59:44 | $20005
(9 rows)
以上就是关于如何用触发器实现记录数据库表更改的记录全部的内容,包括:如何用触发器实现记录数据库表更改的记录、mysql 帐号余额和消费记录表设计、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)