Sum of column values constraint MySQL -


i'm using mysql phpmyadmin. i'm looking way put constraint on table that:

column1(int) + column2(int) + column3(int) <= 100 

in mysql of can not have such constraints in table definition. may use application layer validate this. if want have using mysql can use trigger , raise error using signal https://dev.mysql.com/doc/refman/5.5/en/signal.html

here how trigger like

delimiter // create trigger check_col_sum before insert on test each row begin  if (new.column1+new.column2+new.column3) > 100    signal sqlstate '45000' set message_text = 'sum of column1,column2 , column3 must less equal 100';  end if; end;//  delimiter ; 

test case

mysql> create table test (id int auto_increment primary key, column1 int, column2 int, column3 int); query ok, 0 rows affected (0.14 sec)  mysql> delimiter // mysql> create trigger check_col_sum before insert on test     -> each row     -> begin     ->  if (new.column1+new.column2+new.column3) > 100      ->   signal sqlstate '45000' set message_text = 'sum of column1,column2 , column3 must less equal 100';     ->  end if;     -> end;// query ok, 0 rows affected (0.09 sec)  mysql>  mysql> delimiter ;   mysql> insert test (column1,column2,column3) values (10,20,30); query ok, 1 row affected (0.08 sec)  mysql> select * test ; +----+---------+---------+---------+ | id | column1 | column2 | column3 | +----+---------+---------+---------+ |  1 |      10 |      20 |      30 | +----+---------+---------+---------+ 1 row in set (0.00 sec)    mysql> insert test (column1,column2,column3) values (10,20,80); error 1644 (45000): sum of column1,column2 , column3 must less equal 100 mysql> select * test ; +----+---------+---------+---------+ | id | column1 | column2 | column3 | +----+---------+---------+---------+ |  1 |      10 |      20 |      30 | +----+---------+---------+---------+ 1 row in set (0.00 sec) 

Comments