我想知道如何在删除表(项目(中的条目后减少另一个表(用户(中的字段(项目(。
用户表:
+-----------+--------------+------+-----+---------------------+----------------+
| 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服务器(不能使用托管云数据库(。
这意味着你只剩下
- MySQL中的触发器
- 从应用程序代码进行更新
您的选择取决于您的设置,但使用触发器时应谨慎。它们很容易被忽视,并可能导致死锁/性能打击,这很难调试。
点击此处了解有关触发器的更多信息:https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html