每次选择数据库列时调用 SQL“函数”(存储过程?
Call SQL "function" (stored procedure?) every time a database column is selected
我正在运行MySQL 5.6。我在数据库中有许多不同的"名称"列(在各种表中)。每个客户每年都会将这些数据作为CSV数据转储导入。本网站中有许多地方显示这些名称。问题是,这些名称几乎没有格式(到目前为止,导入时不存在清理):
Phil Eaton, PHIL EATON, Phil EATON, etc.
因此,当涉及这些名称时,网站有时看起来一团糟。我能想到很多方法可以做到这一点,但没有一种特别吸引人。
首先,我可以在Javascript中有一个过滤器。但是,正如我所说,这些名称存在于整个(大型)站点的许多地方。我最终可能会错过一页。这些名称在漂亮的"名称"类div/span 等中已经不存在。
其次,我可以在PHP(后端)中过滤。这似乎和在Javascript中一样有效。我可以在 API 上做到这一点,但仍然没有从数据库中提取名称的中央方法。因此,无论如何,我仍然可能会错过 API 调用。
最后,显而易见的"最佳"方法是清理每个名称列的现有数据。然后,同时,立即开始清理每次添加客户时导入的所有名称。第一部分的问题是数据库中有数亿行名称。更新这些可能需要很长时间,并扰乱客户的日常生活。
因此,在短期内纠正此问题的最吸引人的方法是在每次选择列时调用函数。通过这种方式,我可以使用格式化功能"装饰"每个名称列,以便名称在前端显示统一。所以最终,我的问题是:是否可以在SQL中调用一个特定的函数来格式化每一行,每次选择特定列时?换句话说,也许我可以在每次选择列时调用存储过程?(关键是,我试图在SQL中保留格式以避免使用传播。
在 MySQL 中,您无法在 SELECT 上触发某些内容,但我有一个想法(这只是一个想法,现在我没有时间尝试,对不起)。
您可能可以在此表上创建一个具有相同结构的 VIEW,但将存储过程应用于名称字段,然后在 PHP 中从此视图中进行选择。
但它有两个回抽:
- 您必须修改 PHP 中的所有 SELECT 语句。
- 服务器将始终调用该过程。也许您可以存储格式化的值,然后检查它(缓存它们)。
另一方面,我同意HLGEM的观点,我也建议在导入时格式化数据,因为将不检查的内容导入数据库(SQL注入?批量任务也是清理混乱的好主意。
名称经常被调用,因此每次调用它们时调用清理功能可能会严重减慢您的系统速度。此外,您不能只做一个简单的设置来获取它,您必须更改运行的每个包含名称的SQL代码。
就我个人而言,我将如何处理它是修复导入,以便他们为新名称放入经过消毒的版本。直接将任何数据放入数据库而不进行某种暂存和清理是一个坏主意。
然后,我会处理旧名称,并在每晚运行中批量修复它们,该运行安排在最少的人使用该系统时。您必须在 dev 上进行一些测试,以确定在不干扰数据库正在执行的其他操作的情况下可以运行多大的批处理。批处理越老,您就越早获得所有名称,但即使这需要时间,这也是清理数据的最可靠方法,随着时间的推移,数据对用户来说会更好。如果您的 datbase 设计允许您识别哪些是更活跃的名称(例如客户或去年订单的is_active标志),我会优先考虑更新。或者,您可以一次清理一个客户端,从注意到问题并推动此更改的客户端开始。
之前的其他答案给出了一些可能的解决方案。但是,您询问的特定选项的简短答案是:不。没有所谓的"选择语句触发器",对于单个列也是如此,虽然触发器接近这种期望,但仅适用于插入、更新和删除操作。
- Azure documentdb存储过程返回部分结果
- 将 jquery 函数存储在变量上
- 删除或隐藏下拉列表中的一些值,该列表由使用JavaScript的存储过程填充
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- OracleAPEX:从javascript调用存储过程
- 从网站调用phpmyadmin中的存储过程来检查登录详细信息
- 在异步函数调用过程中,当对象的属性值发生变化时,JavaScript中的对象属性值会发生什么变化
- JS中jQuery函数的过程顺序
- SQL-如何使用存储过程用新主键复制行
- 发送ajax数据中的存储过程
- 在MobileFirst javascript适配器中使用xml输入调用DB存储过程
- 可以将dojo验证器函数存储到变量中,以便以后调用它
- 如何从 JS 代码或存储过程在 DocumentDB 中执行预触发器
- 每次选择数据库列时调用 SQL“函数”(存储过程?
- 存储过程中的Mongodb处理 - JavaScript中的BSON到JSON
- 使用存储过程按需加载 JSTree
- JDBC - MySQL 调用存储过程
- 如何在ASP.NET中的Javascript Confirmbutton Click上执行存储过程
- 为什么同一个存储过程调用被多次触发
- 我应该何时将函数存储到变量中