以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
首先,我会帮你概述一个解决方案,然后提供一些示例代码和参考链接。
解决方案概述:
-
禁用 DELETE 和 UPDATE 操作:这通常通过设置数据库权限来实现,而不是通过触发器。触发器主要用于在数据变更时执行某些操作,而不是阻止变更。
-
创建触发器记录操作:对于每个数据库中的 t_report、t_count、t_list 和 t_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_name 和 updated_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()
参考链接:
- MySQL Triggers
- MySQL Connector/Python
- Python MySQL Tutorial
请注意,禁用 DELETE 和 UPDATE 操作通常不是通过触发器实现的,而是通过数据库权限设置。触发器主要用于在数据变更时执行操作,而不是阻止变更。如果你需要进一步的帮助,请随时告诉我。