如何在MySQL中删除条目时减少不同表中的字段



我想知道如何在删除表(项目(中的条目后减少另一个表(用户(中的字段(项目(。

用户表:

+-----------+--------------+------+-----+---------------------+----------------+
| Field     | Type         | Null | Key | Default             | Extra          |
+-----------+--------------+------+-----+---------------------+----------------+
| id        | int(11)      | NO   | PRI | NULL                | auto_increment |
| username  | varchar(50)  | NO   | UNI | NULL                |                |
| password  | varchar(255) | NO   |     | NULL                |                |
| superuser | tinyint(1)   | NO   |     | 0                   |                |
| projects  | int(11)      | YES  |     | NULL                |                |
| date      | date         | NO   |     | current_timestamp() |                |
+-----------+--------------+------+-----+---------------------+----------------+

项目表:

+---------+--------------+------+-----+---------------------+----------------+
| Field   | Type         | Null | Key | Default             | Extra          |
+---------+--------------+------+-----+---------------------+----------------+
| id      | int(11)      | NO   | PRI | NULL                | auto_increment |
| name    | varchar(50)  | NO   | UNI | NULL                |                |
| creator | varchar(255) | NO   | MUL | NULL                |                |
| visits  | int(11)      | NO   |     | 0                   |                |
| file    | varchar(50)  | NO   |     | NULL                |                |
| date    | date         | NO   |     | current_timestamp() |                |
+---------+--------------+------+-----+---------------------+----------------+

MySQL中的非规范化并不是那么容易。

生成的存储列不能跨表工作,视图也不能具体化。

Flexview(https://github.com/greenlion/swanhart-tools(在O’Reilly的书《高性能MySQL第三版》中得到了热烈的推荐,但对于较新版本的MySQL,它已经停止使用,这意味着你必须自己设置MySQL服务器(不能使用托管云数据库(。

这意味着你只剩下

  1. MySQL中的触发器
  2. 从应用程序代码进行更新

您的选择取决于您的设置,但使用触发器时应谨慎。它们很容易被忽视,并可能导致死锁/性能打击,这很难调试。

点击此处了解有关触发器的更多信息:https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html

最新更新