当前位置: 首页 > 知识库问答 >
问题:

mySQL中子表的约束

丁阳炎
2023-03-14

我有这样的情况:

MANAGER (ManagerID, Salary, .... , email)

PROJECT (ProjectID, ..., Date) 

由于项目经理之间存在关系m:n,我将有第三个表:

Manager_has_Project( ManagerID, ProjectID ) 

其中(ManagerID,ProjectID)是Manager_has_Project的复合主键

让我们假设我们必须删除一个从我们的数据库中创建了一些项目的经理:SQL不会让我们这么做。我们可以在子表“on DELETE cascade”中html" target="_blank">添加对fk ManagerID的约束,但在这种情况下,我们将丢失有关(例如)有多少经理为一个项目工作的信息。另一种选择是“on DELETE SET null”,但是,由于ManagerID是Manager_has_Project的复合主键的一部分,我们不能将一个主键设置为null。

建议怎么做?

共有1个答案

宗政兴发
2023-03-14

如果要保留信息,请使用软删除,而不是实际删除行。

也就是说,添加一列,例如is_deleteddelettion_datetime,该列指示管理器已被删除。然后你就可以保留所有的信息,甚至是关于“被删除”的经理的信息。

您可以使用视图,这样“普通”查询将只返回未删除的经理。

 类似资料:
  • 在MySQL 中可以使用 SHOW CREATE TABLE 语句来查看表中的约束。 查看数据表中的约束语法格式如下: SHOW CREATE TABLE <数据表名>; 例 1 创建数据表 tb_emp8 并指定 id 为主键约束,name 为唯一约束,deptId 为非空约束和外键约束,然后查看表中的约束,SQL 语句运行结果如下。

  • 1.【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint( 1表示是,0表示否),此规则同样适用于odps建表。 说明:任何字段如果为非负数,必须是unsigned。 2.【强制】表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 正例:ge

  • 问题内容: 我想从表中删除约束。我的查询是: 但我得到一个错误: -您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’constraint ‘ 附近使用正确的语法 问题答案: Mysql具有用于删除外键约束的特殊语法:

  • 我想从表中删除约束。我的疑问是: 但我有一个错误: -您的SQL语法中有错误;查看与您的MySQL server版本相对应的手册,以了解在第1行“constraint”附近使用的正确语法

  • 问题内容: 如何使用phpMyAdmin在MySQL表的列上删除“唯一键约束”? 问题答案: 唯一约束也是索引。 首先使用来查找索引的名称。索引的名称存储在该查询结果中调用的列中。 然后,您可以使用DROP INDEX: 或ALTER TABLE语法:

  • 问题内容: 在MySQL中创建非NULL约束以使fieldA和fieldB不能都为NULL的最佳方法是什么。我不在乎任何一个本身是否为NULL,只要另一个字段具有非NULL值即可。而且,如果它们都具有非NULL值,那就更好了。 问题答案: MySQL 5.5引入了SIGNAL,因此我们不再需要Bill Karwin的答案中的额外列。Bill指出您还需要一个更新触发器,因此我也将其包括在内。