gpt4 book ai didi

MySQL 在插入到 table1 时自动将一行插入到 table2

转载 作者:行者123 更新时间:2023-11-29 02:33:34 25 4
gpt4 key购买 nike

在MySQL中是否可以在向table1中插入一行时自动向table2中插入一行?

假设我有以下基本结构:

用户表

id           int(8)       - primary key       - auto increment
username varchar(20)

UserPrivacy 表 - userprivacy.userIduser.id 的外键

id           int(8)       - primary key       - auto increment
userId int(8) - foreign key

当运行诸如 INSERT INTO user (用户名) VALUES ('Bob');

是否有除触发器之外的其他方法,还是最好在用户插入 user 时运行两个查询?

其次,如果它为每个用户存储一个值,那么拥有一个单独的用户隐私表是否会浪费存储空间?将它放在用户表中会更有效吗?但我正在努力让它尽可能轻..

user 表中有更多的列,我只是为了简化此示例

最佳答案

您需要触发器才能“自动”将记录插入到单独的表中。

使用单独的查询将记录插入 UserPrivacy 是最常见的实现方式。

如果是一对一的关系,放在同一张表中可以实现更简单的查询(不需要join)。

决定,决定......

对于一对(零对一)关系,需要考虑更多因素。

如果 UserPrivacy 表很大,那么将它放在一个单独的表中以节省空间可能是有意义的。这也会更加规范化。

如果您经常查询诸如“给我所有没有 PrivacyData 的用户”之类的问题,那么将它放在一个单独的表中可能是有意义的。由于索引不包含 NULL 值(默认情况下),因此对单独的表执行 JOIN 会更快。当然,解决方法是使用 NULL 以外的值来表示“无隐私设置”,但低基数也会对性能产生负面影响。在这种情况下最好使用单独的表格。

此外,如果频繁更新隐私数据而不是用户数据,单独的表将防止用户表上的行锁,并且在较小的表上更新速度更快,这可能会提高性能。

如果您经常需要 UserPrivacy 数据而不需要 UserData,反之亦然,您可能希望将它们分开。

不过,这可能是过早的优化。如果它们更符合您的模型,您可能只想将它们分开。考虑将其保存在同一个表中的简单性与性能、大小和可读性问题。

如果关系是一对(零对多),您显然需要一个单独的表,但对于一对(零对一),它是可选的。

终于……

不要害怕将它们分开,只要有理由。

关于MySQL 在插入到 table1 时自动将一行插入到 table2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8919137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com