Sql 马里亚布触发环

Sql 马里亚布触发环,sql,triggers,mariadb,Sql,Triggers,Mariadb,我正在为学校建立一个数据库。这就是问题所在: 我得到了一个具有属性a、B和C的表,其中C=a/a+B*100。在更新属性A或B时,我需要更新C。 我尝试了不同的方法,但是触发器一直在循环,因为当我更新A或B时,触发器更新C,所以它一直在循环。 此代码不起作用。安装错误: Create trigger nametrigger after update of (A or B) on tablename 但我需要指定触发器必须在A或B更新时激活,而不是C。根据您的描述,您不需要触发器,您需要C成为A

我正在为学校建立一个数据库。这就是问题所在: 我得到了一个具有属性a、B和C的表,其中C=a/a+B*100。在更新属性A或B时,我需要更新C。 我尝试了不同的方法,但是触发器一直在循环,因为当我更新A或B时,触发器更新C,所以它一直在循环。 此代码不起作用。安装错误:

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

但我需要指定触发器必须在A或B更新时激活,而不是C。

根据您的描述,您不需要触发器,您需要C成为A.k.A.虚拟列

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)

这只是一个例子,不是解决方案。您需要阅读有关计算列的内容,以决定需要如何准确地配置它。

将代码保留在客户端的另一个原因。谢谢您的回答。即使A和B是另一个表中的属性,我也可以这样做?不,你不能,你可以通过问题中提供的链接从虚拟计算列页面的第一段中找到。但正如答案明确指出的,它解决了您描述的情况,您明确表示所有列都属于同一个表:我得到了一个具有属性a、B和C的表。。。