2017-02-01 2 views
0

Ich erstelle eine Datenbank für die Schule. Das ist das Problem: Ich habe eine Tabelle mit den Attributen A, B und C (wobei C = (A/(A + B)) * 100). Auf dem Update von Attributen A oder B muss ich C. aktualisieren. Ich habe verschiedene Dinge ausprobiert, aber der Trigger geht in Schleife, denn wenn ich A oder B aktualisiere, aktualisiert der Trigger C, so dass es weiter geht. Dieser Code funktioniert nicht (sintax Fehler):MariaDB Triggerschleife

Create trigger nametrigger 
after update of (A or B) on tablename 

Aber ich muss irgendwie festlegen, dass der Trigger für die Aktualisierung von A zu aktivieren hat oder B und C nicht

+0

Noch ein Grund, Ihren Code im Client zu behalten. –

Antwort

1

Von dem, was Sie beschreiben, , Sie brauchen keinen Trigger, Sie benötigen C als computed column (aka virtuelle Spalte).

MariaDB [test]> CREATE TABLE t (
    a INT, 
    b INT, 
    c INT AS ((a/(a+b))*100) PERSISTENT 
); 

MariaDB [test]> insert into t (a,b) values (1,1); 
MariaDB [test]> insert into t (a,b) values (2,2); 

MariaDB [test]> select * from t; 
+------+------+------+ 
| a | b | c | 
+------+------+------+ 
| 1 | 1 | 50 | 
| 2 | 2 | 50 | 
+------+------+------+ 
2 rows in set (0.01 sec) 

MariaDB [test]> update t set b = b*2; 

MariaDB [test]> select * from t; 
+------+------+------+ 
| a | b | c | 
+------+------+------+ 
| 1 | 2 | 33 | 
| 2 | 4 | 33 | 
+------+------+------+ 
2 rows in set (0.00 sec) 

Dies ist nur ein Beispiel, keine Lösung. Sie müssen über berechnete Spalten lesen, um zu entscheiden, wie genau sie konfiguriert werden müssen.

+0

Danke für die Antwort. Ich kann dasselbe tun, auch wenn A und B Attribute in einer anderen Tabelle sind? –

+0

Nein, das können Sie nicht, wie Sie im ersten Absatz der Seite "Virtuelle (berechnete) Spalten" anhand des in der Frage angegebenen Links herausfinden können. Aber wie die Antwort ausdrücklich darauf hinweist, spricht sie die Situation _ an, wie Sie sie beschreiben, und Sie haben ausdrücklich gesagt, dass alle Spalten zur selben Tabelle gehören: "Ich habe eine Tabelle mit den Attributen A, B und C ..." – elenst