us_ateneo 2024-06-26 13:40 采纳率: 0%
浏览 4

mysql 开发 求解答,给奖赏

感谢各位给予帮助,如果解决,我会给予对应的服务费用, 一定会给费用
---mysql 数据库


需求描述:
业务表名:t_report,t_count,t_list,t_viewtravel。
审核记录表:t_audit_update_delet
 目前服务器有 58个 数据库,都都一张表t_report,t_count,t_list,t_viewtravel,但是 t_report,t_count,t_list,t_viewtravel,表名称相同,但是  “表” 的 “列字段” 不一致,有的数据库有 “10个列”,有的 “15个列”,有的有 “3个列” 。。。。。

需求功能:(通过脚本自动创建 t_report,t_count,t_list,t_viewtravel 这些表在 58个数据库下 update,delete的触发器)
  mysql 触发器+python 实现 。
 
 1: 对 t_report,t_count,t_list,t_viewtravel 这些表  禁用 delete 和 update 操作。
 2: 捕获 对 t_report,t_count,t_list,t_viewtravel  这些表的 执行语句记录 delete,update 操作,插入到我们 的 一个 审核记录表 t_audit_update_delet,方便追溯
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-26 13:40
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    首先,我会帮你概述一个解决方案,然后提供一些示例代码和参考链接。

    解决方案概述:

    1. 禁用 DELETE 和 UPDATE 操作:这通常通过设置数据库权限来实现,而不是通过触发器。触发器主要用于在数据变更时执行某些操作,而不是阻止变更。

    2. 创建触发器记录操作:对于每个数据库中的 t_reportt_countt_listt_viewtravel 表,我们将创建两个触发器:一个用于捕获 DELETE 操作,另一个用于捕获 UPDATE 操作。这些触发器将记录操作的详细信息到 t_audit_update_delet 表中。

    示例代码:

    创建审核记录表 t_audit_update_delet

    CREATE TABLE IF NOT EXISTS t_audit_update_delet (
        id INT AUTO_INCREMENT PRIMARY KEY,
        table_name VARCHAR(255),
        operation_type VARCHAR(10),
        old_data TEXT,
        new_data TEXT,
        operation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    

    创建 DELETE 触发器:

    DELIMITER $$
    
    CREATE TRIGGER before_delete_trigger
    BEFORE DELETE ON t_report FOR EACH ROW
    BEGIN
        INSERT INTO t_audit_update_delet (table_name, operation_type, old_data)
        VALUES ('deleted_table_name', 'DELETE', OLD.*);
    END$$
    
    DELIMITER ;
    

    创建 UPDATE 触发器:

    DELIMITER $$
    
    CREATE TRIGGER before_update_trigger
    BEFORE UPDATE ON t_report FOR EACH ROW
    BEGIN
        INSERT INTO t_audit_update_delet (table_name, operation_type, old_data, new_data)
        VALUES ('updated_table_name', 'UPDATE', OLD.*, NEW.*);
    END$$
    
    DELIMITER ;
    

    请注意,你需要将 deleted_table_nameupdated_table_name 替换为实际的表名,并为每个表和数据库创建相应的触发器。

    Python 脚本示例:

    使用 Python 连接 MySQL 数据库并执行 SQL 语句,可以使用 mysql-connector-python 包。以下是一个简单的示例,用于在所有数据库中创建触发器:

    import mysql.connector
    
    # 连接到 MySQL 服务器
    cnx = mysql.connector.connect(user='your_username', password='your_password', host='your_host')
    cursor = cnx.cursor()
    
    # 遍历所有数据库
    for db in ['db1', 'db2', ..., 'db58']:  # 这里应该是你的数据库列表
        cursor.execute(f"USE {db}")
        create_trigger_sql = """
        -- 这里插入你的触发器创建语句
        """
        cursor.execute(create_trigger_sql)
    
    # 关闭连接
    cursor.close()
    cnx.close()
    

    参考链接:

    1. MySQL Triggers
    2. MySQL Connector/Python
    3. Python MySQL Tutorial

    请注意,禁用 DELETE 和 UPDATE 操作通常不是通过触发器实现的,而是通过数据库权限设置。触发器主要用于在数据变更时执行操作,而不是阻止变更。如果你需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月26日