mysql 基于主键用法对整行添加约束

ohtdti5x  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(119)

我有两张table

表格_1

| 药代动力学ID_表1|是已删除值|
| - -|- -|
| 一个|第0页|
| 2个|第0页|
| 三个|第0页|
| 四个|第0页|

表格_2

| 药代动力学ID_表2|某些值|表1中的ID引用|是已删除值|
| - -|- -|- -|- -|
| 一个|文字1|一个|第0页|
| 2个|文字2| 2个|一个|
| 三个|文字3|三个|第0页|
| 四个|文本4|三个|一个|
现在,我想在“Table 1”上设置一个约束,以防止基于以下两点更改“IsDeletedValue”:
1.如果“表2”中引用了ID,则“表1”中的“IsDeletedValue”无法更改
1.如果引用“表1”的行将“IsDeletedValue”设置为“0”,则无法更改“表1”中的“IsDeletedValue”
因此,在我的方案中,如果我尝试将“Table 1”中所有行的“IsDeletedValue”值设置为“1”,则会发生以下情况
第1行-保持为“0”-由于其PK在“ID_reference_from_table_1”下被引用,并且在同一行中,“IsDeletedValue”未设置为1
行2 -更改为“1”-是,其PK在“表2”中引用,但引用它的唯一行将其自身的“IsDeletedValue”设置为“1”
行3 -保持为“0”-它被引用了2次,但由于并非所有引用它的行都将其“IsDeletedValue”设置为“1”,因此它不会更改
第4行-更改为“1”-在“表2”中未引用,因此没有任何内容可阻止其更改

EDIT:由于有人告诉我无法完成此操作,因此我如何编写一个选择语句(返回“true”或“false”),以查看ID_Table1(n)是否用于“Table 2”中“IsDeletedValue”为0的行(也称为“Table 1”中“IsDeletedValue”的值无法更改)

szqfcxe2

szqfcxe21#

通过检查以下选择是否返回任何结果进行修复:

SELECT a.ID_Table1
FROM Table_1 a INNER JOIN Table_2 b 
ON a.ID_Table1=b.ID_reference_from_table_1
WHERE b.IsDeletedValue=0 AND a.ID_Table1=?

并且我发送?作为Table_1中的参数ID,以了解正在编辑的行

相关问题