当前位置: 首页 > wzjs >正文

做网站怎么防止被黑公司网站制作的教程

做网站怎么防止被黑,公司网站制作的教程,wordpress主题制作全过程(三):html静态模板制作,如何快速优化网站排名引言 各位数据库爱好者们好!今天我们要探索MySQL中两个强大的自动化工具——函数和触发器 🚀。函数就像数据库中的"瑞士军刀",能帮你高效处理各种数据;而触发器则是数据库的"自动感应器",能在数据…

引言

各位数据库爱好者们好!今天我们要探索MySQL中两个强大的自动化工具——函数和触发器 🚀。函数就像数据库中的"瑞士军刀",能帮你高效处理各种数据;而触发器则是数据库的"自动感应器",能在数据变化时自动执行操作。掌握这些功能,你将能构建更加智能、自动化的数据库系统!本教程将带你从内置函数到自定义开发,从触发器基础到高级应用,全面提升你的MySQL自动化技能!💪


一、MySQL内置函数大全

1.1 字符串处理函数:文本操作利器

字符串函数就像文字编辑工具,帮你轻松处理文本数据 ✂️:

常用字符串函数

-- 连接字符串
SELECT CONCAT('Hello', ' ', 'World');  -- Hello World
SELECT CONCAT_WS('-', '2023', '01', '01');  -- 2023-01-01-- 大小写转换
SELECT LOWER('MySQL');  -- mysql
SELECT UPPER('mysql');  -- MYSQL-- 截取与填充
SELECT SUBSTRING('2023-01-15', 6, 2);  -- 01
SELECT LPAD(5, 3, '0');  -- 005
SELECT TRIM('  MySQL  ');  -- MySQL-- 查找与替换
SELECT INSTR('MySQL', 'SQL');  -- 3
SELECT REPLACE('I use Oracle', 'Oracle', 'MySQL');  -- I use MySQL-- 正则表达式(MySQL 8.0+)
SELECT REGEXP_LIKE('abc123', '^[a-z]+[0-9]+$');  -- 1
SELECT REGEXP_REPLACE('abc123', '[0-9]', 'X');  -- abcXXX

1.2 数值计算函数:数学运算专家

数值函数就像计算器,帮你完成各种数学运算 🧮:

常用数值函数

-- 基本运算
SELECT ABS(-10);  -- 10
SELECT MOD(15, 4);  -- 3
SELECT POW(2, 3);  -- 8
SELECT ROUND(3.1415, 2);  -- 3.14
SELECT TRUNCATE(3.1415, 2);  -- 3.14 (直接截断)-- 随机数
SELECT RAND();  -- 0-1之间的随机数
SELECT FLOOR(1 + RAND() * 10);  -- 1-10的随机整数-- 数学函数
SELECT SQRT(16);  -- 4
SELECT LOG(2, 8);  -- 3
SELECT SIN(PI()/2);  -- 1-- 聚合函数
SELECT AVG(salary) FROM employees;
SELECT SUM(quantity*price) FROM order_items;

1.3 日期时间函数:时间管理大师

日期函数就像日历和闹钟,帮你处理时间数据 ⏰:

常用日期函数

-- 当前时间
SELECT NOW();  -- 2023-01-15 14:30:00
SELECT CURDATE();  -- 2023-01-15
SELECT CURTIME();  -- 14:30:00-- 日期解析
SELECT YEAR('2023-01-15');  -- 2023
SELECT MONTHNAME('2023-01-15');  -- January
SELECT DAYOFWEEK('2023-01-15');  -- 1(周日)-- 日期计算
SELECT DATE_ADD('2023-01-15', INTERVAL 1 MONTH);  -- 2023-02-15
SELECT DATEDIFF('2023-01-20', '2023-01-15');  -- 5
SELECT LAST_DAY('2023-01-15');  -- 2023-01-31-- 格式化
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s');  -- 2023年01月15日 14:30:00
SELECT TIME_FORMAT('14:30:00', '%h:%i %p');  -- 02:30 PM

二、自定义函数:打造专属工具

2.1 创建自定义函数

自定义函数就像DIY工具,满足你的特殊需求 🛠️:

基本语法

DELIMITER //CREATE FUNCTION 函数名(参数 数据类型, ...)
RETURNS 返回值类型
[DETERMINISTIC|NOT DETERMINISTIC]
BEGIN-- 函数体RETURN 返回值;
END //DELIMITER ;

实际示例

-- 创建计算税后工资的函数
DELIMITER //CREATE FUNCTION calculate_net_salary(gross_salary DECIMAL(10,2),tax_rate DECIMAL(5,2)
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGINDECLARE net_salary DECIMAL(10,2);SET net_salary = gross_salary * (1 - tax_rate/100);RETURN net_salary;
END //DELIMITER ;

调用自定义函数

SELECT employee_id,salary,calculate_net_salary(salary, 20) AS net_salary
FROM employees;

2.2 函数特性与限制

函数特性

  • 必须使用RETURN语句返回值
  • 可以调用其他函数或存储过程
  • 支持递归调用(有深度限制)
  • 可以是确定性(DETERMINISTIC)或非确定性函数

与存储过程的区别

特性函数存储过程
返回值必须返回一个值可以没有或多个OUT参数
调用方式在SQL语句中直接调用使用CALL语句调用
事务控制不能包含事务语句可以包含完整事务
结果集不能返回结果集可以返回多个结果集

三、触发器:自动化数据守护者

3.1 触发器基础与创建

触发器就像数据库的"自动感应器",在数据变化时自动执行操作 🤖:

基本语法

DELIMITER //CREATE TRIGGER 触发器名
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 表名 FOR EACH ROW
BEGIN-- 触发器逻辑
END //DELIMITER ;

实际示例

-- 创建审计日志触发器
DELIMITER //CREATE TRIGGER audit_employee_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGINIF NEW.salary <> OLD.salary THENINSERT INTO salary_change_logs(employee_id,old_salary,new_salary,change_time) VALUES (NEW.employee_id,OLD.salary,NEW.salary,NOW());END IF;
END //DELIMITER ;

3.2 NEW与OLD关键字

在触发器中可以访问特殊记录:

  • INSERT触发器:只有NEW可用
  • UPDATE触发器:NEW和OLD都可用
  • DELETE触发器:只有OLD可用

使用示例

-- 确保价格调整不超过10%
DELIMITER //CREATE TRIGGER validate_price_change
BEFORE UPDATE ON products
FOR EACH ROW
BEGINDECLARE max_change DECIMAL(5,2);SET max_change = 0.10;  -- 最大10%变化IF ABS((NEW.price - OLD.price) / OLD.price) > max_change THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = '价格调整幅度不能超过10%';END IF;
END //DELIMITER ;

3.3 触发器管理

查看触发器

SHOW TRIGGERS;
SHOW TRIGGERS FROM database_name;
SHOW CREATE TRIGGER trigger_name;

修改触发器
MySQL不支持直接修改触发器,必须先删除再重建:

DROP TRIGGER IF EXISTS trigger_name;
-- 然后重新创建

四、触发器高级应用场景

4.1 数据完整性维护

级联非主键更新

DELIMITER //CREATE TRIGGER cascade_department_name
AFTER UPDATE ON departments
FOR EACH ROW
BEGINIF NEW.department_name <> OLD.department_name THENUPDATE employeesSET department_name = NEW.department_nameWHERE department_id = NEW.department_id;END IF;
END //DELIMITER ;

4.2 自动计算派生列

维护订单总金额

DELIMITER //CREATE TRIGGER update_order_total
AFTER INSERT ON order_items
FOR EACH ROW
BEGINUPDATE ordersSET total_amount = (SELECT SUM(quantity*price) FROM order_items WHERE order_id = NEW.order_id)WHERE order_id = NEW.order_id;
END //DELIMITER ;

4.3 业务规则实施

限制库存不能为负

DELIMITER //CREATE TRIGGER prevent_negative_inventory
BEFORE UPDATE ON products
FOR EACH ROW
BEGINIF NEW.stock_quantity < 0 THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = '库存数量不能为负数';END IF;
END //DELIMITER ;

五、函数与触发器实战案例

5.1 完整审计系统实现

创建审计表

CREATE TABLE audit_log (log_id INT AUTO_INCREMENT PRIMARY KEY,table_name VARCHAR(50) NOT NULL,record_id INT NOT NULL,action ENUM('INSERT','UPDATE','DELETE') NOT NULL,change_time DATETIME NOT NULL,user_name VARCHAR(50) NOT NULL,old_data JSON,new_data JSON
);

创建通用审计触发器

DELIMITER //CREATE TRIGGER audit_employee_changes
AFTER INSERT OR UPDATE OR DELETE ON employees
FOR EACH ROW
BEGINDECLARE v_action VARCHAR(10);DECLARE v_user VARCHAR(50);-- 确定操作类型IF INSERTING THENSET v_action = 'INSERT';ELSEIF UPDATING THENSET v_action = 'UPDATE';ELSESET v_action = 'DELETE';END IF;-- 获取当前用户SET v_user = CURRENT_USER();-- 插入审计记录INSERT INTO audit_log (table_name,record_id,action,change_time,user_name,old_data,new_data) VALUES ('employees',COALESCE(NEW.employee_id, OLD.employee_id),v_action,NOW(),v_user,CASE WHEN v_action IN ('UPDATE','DELETE') THEN JSON_OBJECT('employee_id', OLD.employee_id,'first_name', OLD.first_name,'last_name', OLD.last_name,'salary', OLD.salary)ELSE NULL END,CASE WHEN v_action IN ('INSERT','UPDATE') THEN JSON_OBJECT('employee_id', NEW.employee_id,'first_name', NEW.first_name,'last_name', NEW.last_name,'salary', NEW.salary)ELSE NULL END);
END //DELIMITER ;

5.2 数据加密函数实现

创建加密函数

DELIMITER //CREATE FUNCTION encrypt_data(plain_text VARCHAR(255),secret_key VARCHAR(32)
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN-- 简单加密示例(实际项目应使用更强加密)DECLARE encrypted_text VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 1;DECLARE len INT;DECLARE key_len INT;SET len = LENGTH(plain_text);SET key_len = LENGTH(secret_key);WHILE i <= len DOSET encrypted_text = CONCAT(encrypted_text,CHAR(ASCII(SUBSTRING(plain_text, i, 1)) + ASCII(SUBSTRING(secret_key, (i % key_len) + 1, 1)));SET i = i + 1;END WHILE;RETURN encrypted_text;
END //DELIMITER ;-- 配套的解密函数
DELIMITER //CREATE FUNCTION decrypt_data(encrypted_text VARCHAR(255),secret_key VARCHAR(32)
RETURNS VARCHAR(255)
DETERMINISTIC
BEGINDECLARE plain_text VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 1;DECLARE len INT;DECLARE key_len INT;SET len = LENGTH(encrypted_text);SET key_len = LENGTH(secret_key);WHILE i <= len DOSET plain_text = CONCAT(plain_text,CHAR(ASCII(SUBSTRING(encrypted_text, i, 1)) - ASCII(SUBSTRING(secret_key, (i % key_len) + 1, 1)));SET i = i + 1;END WHILE;RETURN plain_text;
END //DELIMITER ;

总结 🎯

通过本教程,我们系统学习了MySQL函数和触发器的强大功能 🎓:

  1. 内置函数:掌握了字符串、数值、日期等各类内置函数的使用
  2. 自定义函数:学会了创建和使用自定义函数解决特定问题
  3. 触发器基础:理解了触发器的创建语法和基本应用
  4. 高级应用:探索了触发器在数据完整性、业务规则等方面的应用

关键收获

  • 函数是代码复用的重要手段
  • 触发器能实现自动化数据管理
  • NEW和OLD是触发器的特殊记录访问方式
  • 合理使用函数和触发器可以简化应用逻辑

最佳实践建议

  1. 为函数和触发器使用清晰的命名规范
  2. 添加充分的注释说明逻辑
  3. 避免在触发器中执行耗时操作
  4. 考虑性能影响,不要过度使用触发器

下一步学习建议

  1. 在实际项目中应用所学函数和触发器
  2. 学习MySQL事件调度器实现定时任务
  3. 探索存储引擎的更高级特性
  4. 研究数据库设计模式和优化策略

PS:如果你在学习过程中遇到问题,别慌!欢迎在评论区留言,我会尽力帮你解决!😄


文章转载自:

http://pRpRDFag.bydpr.cn
http://5FwVaYr8.bydpr.cn
http://qknUvsez.bydpr.cn
http://yieg8FzQ.bydpr.cn
http://zQ3vEBIM.bydpr.cn
http://aJ07z9Wl.bydpr.cn
http://pbGBhR8x.bydpr.cn
http://A9Ju4Eez.bydpr.cn
http://CLEMop3J.bydpr.cn
http://t5ETtKSl.bydpr.cn
http://XO8fAaJV.bydpr.cn
http://YT7V8k61.bydpr.cn
http://hKKzYXqS.bydpr.cn
http://fk07TKXw.bydpr.cn
http://IqTWw6JA.bydpr.cn
http://ZQ26x4kW.bydpr.cn
http://6vl4IsMi.bydpr.cn
http://0KH430oN.bydpr.cn
http://hjTmmWTr.bydpr.cn
http://8cblCNGF.bydpr.cn
http://l0GBzwbd.bydpr.cn
http://K5a6anaU.bydpr.cn
http://K6Vu0tyM.bydpr.cn
http://uoBNWMI8.bydpr.cn
http://1jYYV2Ta.bydpr.cn
http://dEe3FU48.bydpr.cn
http://BBvyHVF2.bydpr.cn
http://ykHNtCng.bydpr.cn
http://THc0CJzI.bydpr.cn
http://RsPlFqE8.bydpr.cn
http://www.dtcms.com/wzjs/737193.html

相关文章:

  • wordpress站点自动推送10个不愁销路的小型加工厂
  • 门户类网站有哪些网站服务公司人工成本进什么费用
  • 打字网站怎么做义乌网站建设软件开发
  • 捷讯官网 网站建设官方网站做兼职
  • pc网站 公众号数据互通网站开发 弹窗
  • 做网站有没有前途网站运行平台包括
  • 青岛百度网站排名镇江网站搜索引擎优化
  • 网站管理与维护黑龙江城乡建设厅官网
  • 商城网站源码大全wordpress设置使用旧版编辑器
  • 做网站 套模板 后端wordpress首页缓存
  • 上海企业制作网站有哪些电子商务网站推广的主要方法
  • 做网站平台的工作网站加网页
  • 庆阳网站建设外贸做那种网站有哪些
  • 中国手机网站小程序商店app
  • 郑州直播网站建设公司整站优化cms
  • 工业和信息化部网站备案厦门橄榄网站建设
  • 网站被墙wordpress作者英文版
  • 企业网站做的公司深圳网络推广专员
  • 广东品牌网站建设服务机构wordpress 防盗链
  • 网站建网站建设和优网站建设意见征求表
  • wordpress博客站模板下载做网站的字体大小
  • 营销型网站建设哪里济南兴田德润优惠吗wordpress 页面改造
  • 全国当先的网络建站推广临安市建设局网站
  • 网站内容创造wordpress添加vip用户组
  • 凡科建站快车做网站需要学些什么软件
  • 凡科建站帮忙做网站网络营销方案500字
  • 网站流量运营招聘门户网站是什么意思
  • 国外网站搭建平台网站如何被谷歌收录
  • 那些网站可以做文案兼职郑州免费自助建站模板
  • wordpress视频站模板下载如何在头条上做网站推广