拒绝mysql插入查询,其中特定列为零(0)

时间:2016-09-01 05:21:12

标签: mysql linux

服务器版本:5.6,内存16G,8核处理器

我有一个表“radacct”,由网络路由器更新。路由器每分钟随机发送插入查询。插入查询的示例

+----------------------+-------------+------+-----+---------+----------------+
| Field                | Type        | Null | Key | Default | Extra          |
+----------------------+-------------+------+-----+---------+----------------+
| radacctid            | bigint(21)  | NO   | PRI | NULL    | auto_increment |
| acctsessionid        | varchar(32) | NO   | MUL |         |                |
| acctuniqueid         | varchar(32) | NO   | MUL |         |                |
| username             | varchar(64) | NO   | MUL |         |                |
| groupname            | varchar(64) | NO   |     |         |                |
| realm                | varchar(64) | YES  |     |         |                |
| nasipaddress         | varchar(15) | NO   | MUL |         |                |
| nasportid            | varchar(15) | YES  |     | NULL    |                |
| nasporttype          | varchar(32) | YES  |     | NULL    |                |
| acctstarttime        | datetime    | YES  | MUL | NULL    |                |
| acctstoptime         | datetime    | YES  | MUL | NULL    |                |
| acctsessiontime      | int(12)     | YES  | MUL | NULL    |                |
| acctauthentic        | varchar(32) | YES  |     | NULL    |                |
| connectinfo_start    | varchar(50) | YES  |     | NULL    |                |
| connectinfo_stop     | varchar(50) | YES  |     | NULL    |                |
| acctinputoctets      | bigint(20)  | YES  |     | NULL    |                |
| acctoutputoctets     | bigint(20)  | YES  |     | NULL    |                |
| calledstationid      | varchar(50) | NO   |     |         |                |
| callingstationid     | varchar(50) | NO   |     |         |                |
| acctterminatecause   | varchar(32) | NO   |     |         |                |
| servicetype          | varchar(32) | YES  |     | NULL    |                |
| framedprotocol       | varchar(32) | YES  |     | NULL    |                |
| framedipaddress      | varchar(15) | NO   | MUL |         |                |
| acctstartdelay       | int(12)     | YES  |     | NULL    |                |
| acctstopdelay        | int(12)     | YES  |     | NULL    |                |
| xascendsessionsvrkey | varchar(10) | YES  |     | NULL    |                |
+----------------------+-------------+------+-----+---------+----------------+

表架构:

"acctinputoctets"

问题是具有"acctoutputoctets"的表字段"0"mysql> delimiter $$ mysql> create trigger blockZero before insert on radacct -> for each row -> begin -> if new.val < 1 then -> signal sqlstate '45000'; -> end if; -> end;$$ Query OK, 0 rows affected (0.01 sec) 对我们没用,并且具有0值的累积行占用服务器上的大量空间。我无法控制插入查询。我如何拒绝这样的插入查询?

更新

插入触发器之前

options_from_collection_for_select(@external_tools, "id", 
  proc{ |external_tool| external_tool.product + external_tool.vendor } )

1 个答案:

答案 0 :(得分:0)

在插入触发器之前创建

mysql> delimiter $$
mysql> create trigger blockZero before insert on radacct
    -> for each row
    -> begin
    -> if new.acctinputoctets  < 1 then 
    -> signal sqlstate '45000';
    -> end if;
    -> end;$$
Query OK, 0 rows affected (0.01 sec)

https://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html