php select返回条数据,php – SQL INSERT INTO SELECT并返回SELECT数据以创建行视图计数...

本文探讨了如何通过创建独立的Audit表来实现数据库审计,以跟踪Main表中项的请求历史,同时保持主表的效率。建议使用存储过程来透明地插入审计数据,并提供在不同数据库系统中的实现示例。此外,还强调了审计数据应与主数据分离以避免冗余,并讨论了审计数据的生命周期管理。
摘要由CSDN通过智能技术生成

首先,我不会在Main表中添加计数器列.我将创建一个单独的Audit表,该表将保留Main表中项的ID以及请求该ID时的至少时间戳.实质上,Audit表将存储请求的历史记录.在这种方法中,您可以轻松生成更有趣的报告.您始终可以计算每个项目的总计,还可以按每个项目或所有项目按天,周,月等计算摘要.根据数据量,您可以定期删除超过某个阈值(一个月,一年等)的审核条目.

此外,您可以根据需要在Audit表中轻松存储更多信息,例如,用户ID来计算每个用户的统计信息.

要“自动”填充Audit表,我将创建一个存储过程.客户端代码将调用此存储过程而不是执行原始SELECT.存储过程将返回与原始SELECT完全相同的结果,但也会向Audit表透明地向客户端代码添加必要的详细信息.

所以,我们假设Audit表看起来像这样:

CREATE TABLE AuditTable

(

ID int

IDENTITY -- sql Server

SERIAL -- Postgres

AUTO_INCREMENT -- MysqL

NOT NULL,ItemID int NOT NULL,RequestDateTime datetime NOT NULL

)

你的主要SELECT看起来像这样:

SELECT ItemID,Col1,Col2,...

FROM MainTable

WHERE

要在sql Server中的一个语句中执行INSERT和SELECT,我将使用OUTPUT子句,在Postgres – RETURNING子句中,在MysqL中 – ???我不认为它有这样的东西.所以,MysqL程序会有几个单独的语句.

首先执行SELECT并将结果插入到temporary(可能是内存)表中.然后将项目ID从临时表复制到Audit表中.然后从临时表中选择SELECT以将结果返回给客户端.

CREATE TEMPORARY TABLE TempTable

(

ItemID int NOT NULL,Col1 ...,Col2 ...,...

)

ENGINE = MEMORY

SELECT ItemID,...

FROM MainTable

WHERE

;

INSERT INTO AuditTable (ItemID,RequestDateTime)

SELECT ItemID,NOW()

FROM TempTable;

SELECT ItemID,...

FROM TempTable

ORDER BY ...;

sql Server(只是为了取笑你.这个单个语句同时执行INSERT和SELECT)

MERGE INTO AuditTable

USING

(

SELECT ItemID,...

FROM MainTable

WHERE

) AS Src

ON 1 = 0

WHEN NOT MATCHED BY TARGET THEN

INSERT

(ItemID,RequestDateTime)

VALUES

(Src.ItemID,GETDATE())

OUTPUT

Src.ItemID,Src.Col1,Src.Col2,...

;

您可以按原样保留Audit表,也可以设置cron以定期对其进行汇总.这实际上取决于数据量.在我们的系统中,我们存储了一周的单个行,另外我们总结了每小时的统计数据并将其保留了6周,此外我们将每日摘要保存18个月.但是,重要的是,所有这些摘要都是单独的审计表,我们不会在主表中保留审计信息,因此我们不需要更新它.

Now go to any sql Forum text search the postings. You will find

thousands of postings with DDL that include columns named createdby,

createddate,modifiedby and modifieddate with that particular

Meta data on the end of the row declaration. It is the old mag tape

header label written in a new language! Deja Vu!

The header records appeared only once on a tape. But these Meta data values appear over and over on every row in the table. One of the main reasons for using databases (not just sql) was to remove redundancy from the data; this just adds more redundancy. But now think about what happens to the audit trail when a row is deleted? What happens to the audit trail when a row is updated? The trail is destroyed. The audit data should be separated from the schema. Would you put the log file on the same disk drive as the database? Would an accountant let the same person approve and receive a payment?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值