mysql页面浏览记录表设计

-- 页面浏览记录表
CREATE TABLE BROWSING_RECORD (  
  ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,  
  USER_ID VARCHAR(32) NOT NULL DEFAULT '' COMMENT '请求用户ID',
  USER_NAME VARCHAR(200) NOT NULL DEFAULT '' COMMENT '请求用户',
  IP VARCHAR(64) NOT NULL DEFAULT '' COMMENT '请求IP地址',
  OPERATION_LEVEL INT(1) NOT NULL DEFAULT 0 COMMENT '操作等级0-正常,1-告警,2-危险,默认0',
  BROWSE_MODULE VARCHAR(4096) NOT NULL DEFAULT '' COMMENT '浏览模块',
  OPERATION_ACTION VARCHAR(4096) NOT NULL DEFAULT '' COMMENT '操作动作',
  PAGE_URL VARCHAR(4096) NOT NULL DEFAULT '' COMMENT '请求url',
  OPERATION_RESULT VARCHAR(4096) NOT NULL DEFAULT '' COMMENT '操作结果',
  OPERATION_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '请求时间',
  REQUEST_CODE VARCHAR(64) NOT NULL DEFAULT '' COMMENT '详情',
  REMARKS VARCHAR(4096) NOT NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (ID)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

-- 页面信息详细表
CREATE TABLE REQUEST_DETAILS (
  REQUEST_CODE VARCHAR(64) NOT NULL DEFAULT '',  
  REQ_DETAILS TEXT NOT NULL DEFAULT '' COMMENT '请求详情',
  OPERATION_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '请求时间',
  RESP_DETAILS TEXT NOT NULL DEFAULT '' COMMENT '请求详情',
  RESP_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '响应时间',
  CREATED_TIME TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (REQUEST_CODE) 
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
-- 唯一索引
ALTER TABLE REQUEST_DETAILS ADD UNIQUE (REQUEST_CODE);

 

-- 数据量很大,旧数据定期归档方案
-- 暂时定手动执行SQL备份时间维度历史数据,清空时间维度源表
-- 1 创建历史表,表结构和索引与旧表一模一样

CREATE TABLE BROWSING_RECORD_HISTORY LIKE BROWSING_RECORD;
CREATE TABLE REQUEST_DETAILS_HISTORY LIKE REQUEST_DETAILS;

-- 2 新建存储过程,查询30天的数据并归档进新数据库,然后把30天前的旧数据从旧表里删除
DELIMITER $
DROP PROCEDURE IF EXISTS SP_BRH_RDH$
CREATE PROCEDURE SP_BRH_RDH()
BEGIN
INSERT INTO BROWSING_RECORD_HISTORY SELECT * FROM BROWSING_RECORD WHERE OPERATION_TIME < NOW()  -  INTERVAL 30 DAY;
DELETE FROM BROWSING_RECORD WHERE OPERATION_TIME < NOW() - INTERVAL 30 DAY;
INSERT INTO REQUEST_DETAILS_HISTORY SELECT * FROM REQUEST_DETAILS WHERE OPERATION_TIME < NOW()  -  INTERVAL 30 DAY;
DELETE FROM REQUEST_DETAILS WHERE OPERATION_TIME < NOW() - INTERVAL 30 DAY;
END $
DELIMITER ;
-- 3 创建EVENT,每30天晚上凌晨00:00定时执行上面的存储过程
CREATE EVENT IF NOT EXISTS EVENT_TEMP 
ON SCHEDULE EVERY 30 DAY
ON COMPLETION PRESERVE
DO CALL SP_BRH_RDH();

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的实现浏览记录功能的示例代码: 1. 创建数据库表 首先需要在 MySQL 中创建一个表来存储浏览记录,可以使用以下 SQL 语句: ```sql CREATE TABLE browsing_history ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, url VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 2. 编写 Java Servlet 创建一个 Java Servlet 来处理用户访问页面时添加浏览记录的操作。以下是示例代码: ```java import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/addHistory") public class AddHistoryServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String DB_URL = "jdbc:mysql://localhost:3306/test"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "password"; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = request.getParameter("url"); String title = request.getParameter("title"); int userId = 1; // TODO: 获取当前用户 ID try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); String sql = "INSERT INTO browsing_history (user_id, url, title) VALUES (?, ?, ?)"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, userId); stmt.setString(2, url); stmt.setString(3, title); stmt.executeUpdate(); conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } response.sendRedirect(url); } } ``` 这个 Servlet 接收两个参数:`url` 和 `title`,分别表示用户访问的页面的 URL 和标题。在 Servlet 中,首先获取当前用户的 ID(在这个示例中,我们假设当前用户的 ID 为 1),然后将浏览记录插入到数据库中。最后,重定向到用户访问的页面。 3. 在 JSP 页面中添加链接 在 JSP 页面中,为了添加浏览记录,需要将页面中的链接都修改为使用一个特定的 URL,这个 URL 包含用户访问的原始 URL 和标题信息。以下是示例代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>浏览记录示例</title> </head> <body> <h1>浏览记录示例</h1> <ul> <li><a href="<%=request.getContextPath()%>/addHistory?url=http://www.example.com/page1&title=页面1">页面1</a></li> <li><a href="<%=request.getContextPath()%>/addHistory?url=http://www.example.com/page2&title=页面2">页面2</a></li> <li><a href="<%=request.getContextPath()%>/addHistory?url=http://www.example.com/page3&title=页面3">页面3</a></li> </ul> </body> </html> ``` 在这个示例中,我们为每个页面添加一个链接,链接的 URL 包含了原始页面的 URL 和标题信息。当用户点击这些链接时,将会调用之前创建的 Servlet,将浏览记录插入到数据库中,并重定向到原始页面。 4. 显示浏览记录 最后,为了显示用户的浏览记录,可以创建一个 JSP 页面来查询数据库,并将结果显示出来。以下是示例代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>浏览记录示例</title> </head> <body> <h1>浏览记录</h1> <table> <thead> <tr> <th>时间</th> <th>标题</th> <th>URL</th> </tr> </thead> <tbody> <% try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); String sql = "SELECT * FROM browsing_history WHERE user_id = ? ORDER BY timestamp DESC"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, 1); // TODO: 获取当前用户 ID ResultSet rs = stmt.executeQuery(); while (rs.next()) { String title = rs.getString("title"); String url = rs.getString("url"); Date timestamp = rs.getTimestamp("timestamp"); out.println("<tr>"); out.println("<td>" + timestamp + "</td>"); out.println("<td>" + title + "</td>"); out.println("<td><a href=\"" + url + "\">" + url + "</a></td>"); out.println("</tr>"); } conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } %> </tbody> </table> </body> </html> ``` 这个 JSP 页面会查询数据库,获取当前用户的浏览记录,并将记录显示在一个表格中。需要注意的是,这个示例中用户 ID 都是写死的,需要根据具体的业务逻辑将其替换为实际的用户 ID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值