gpt4 book ai didi

sql - Oracle 检查约束

转载 作者:行者123 更新时间:2023-12-01 12:52:18 25 4
gpt4 key购买 nike

假设我有一个

table User(userid, usernama) 和一个table Owner(ownerid, ownername) 和一个连接表 UserOwnerMapping(userid, ownerid, IS_MASTER)这在用户和所有者之间创建了多对多

is_master 默认为“N”。一个用户只能有一个主人。

我如何使用约束来强制不超过一个主控对于用户?

我正在使用 Oracle。

最佳答案

您可以使用基于函数的唯一索引来实现约束:

create unique index idx on userownermapping 
(case when is_master='Y' then userid end);

这只会在 is_master = 'Y' 时索引用户 ID,因此当 is_master = 'Y' 时强制用户 ID 是唯一的,否则不是:

SQL> create table UserOwnerMapping (userid integer, ownerid integer, IS_MASTER varchar2(1));

Table created.

SQL>
SQL> create unique index idx on userownermapping
2 (case when is_master='Y' then userid end);

Index created.

SQL>
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 2, 'Y');

1 row created.

SQL>
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 3, 'N');

1 row created.

SQL>
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 4, 'N');

1 row created.

SQL>
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 5, 'Y');
insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 5, 'Y')
*
ERROR at line 1:
ORA-00001: unique constraint (MYSCHEMA.IDX) violated

关于sql - Oracle 检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538869/

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