问题:
>我有一个有行的表,没什么特别的
>当数据库用户删除行时,它应该递增一个数字
>数据库用户只允许在表中删除最多3行
>数据库管理员应该能够向数据库用户添加更多“删除令牌”
我知道我应该有一个BEFORE DELETE触发器来查看用户是否可以删除一行,还有一个AFTER DELETE触发器来增加用户删除的行数.
我应该如何存储有关数据库用户从该特定表中删除了多少行的信息,以及如何允许数据库管理员向用户添加更多“删除令牌”.
我想创建一个表来存储它,但是我想知道在没有表的情况下是否有不同的方法可以做到这一点?这可能听起来像一个奇怪的问题,但我只想弄清楚更先进的东西是如何工作的.
解决方法:
有了这种粒度,您需要进行相当精细的设置.
我在考虑建议几件事
建议#1:使用专门DML的存储过程
必须对每个用户的DELETE数量进行微观管理以减轻DML,这不应成为针对特定表的DELETE的以服务器为中心的功能.这应该仍然是以应用程序为中心的功能.因此,创建一个可以管理DELETE数量的存储过程.
建议#2:使用BLACKHOLE存储引擎
任何使用真实表的DELETE的审计跟踪都可能会产生一个本地化的磁盘瓶颈,这对于节流来说有点笨拙.如果审计跟踪记录在BLACKHOLE表中,那么这将显着减少任何磁盘I / O问题,否则会导致其丑陋.如果您写入BLACKHOLE表,那么审计跟踪数据将写入何处?这导致……
建议#3:使用MySQL复制
MySQL Replication如何提供帮助?假设该表名为mydb.audittrail.如果mydb.audittrail在Prod服务器上使用BLACKHOLE,它可以复制到具有mydb.audittrail作为MyISAM的Slave.那将是实际审计数据的位置.唯一的缺点是添加了磁盘I / O,用于将审计跟踪信息写入二进制日志.您可以通过将二进制日志存储在SSD或RAM磁盘上来进一步减少这种情况.
有关使用BLACKHOLE存储引擎和MySQL Replication进行审计跟踪记录概念的更多信息,请参阅我对Is it normal to use many Triggers?的回答.
标签:mysql,trigger
来源: https://codeday.me/bug/20190806/1595094.html