唯一键约束,无列顺序

时间:2019-11-11 01:51:39

标签: mysql sql database

我有一张桌子 drug_interaction(drug1_id,drug2_id)

我想知道是否可以在不考虑值顺序的情况下具有唯一的drug1_id和drug2_id对。例如,如果表中已经存在(1,2) 然后不允许插入(2,1)。

2 个答案:

答案 0 :(得分:0)

这在MySQL中很难做到。在许多数据库中,您可以使用check约束条件来确保药物有序:

check (drug1_id < drug2_Id)

但是,MySQL实际上并没有强制执行这些约束。

执行此操作的唯一方法是在表上使用触发器。

答案 1 :(得分:0)

一种方法是创建两个计算列,分别在每个记录上存储最小drug_id和最大create table drug_interaction( drug1_id int , drug2_id int, drug_least int as (least(drug1_id, drug2_id)) stored, drug_greatest int as (greatest(drug1_id, drug2_id)) stored, unique key unique_drugs (drug_least, drug_greatest) ) ,并对它们施加唯一约束。

考虑:

insert into drug_interaction(drug1_id, drug2_id) values(1, 2)
-- ok

insert into drug_interaction(drug1_id, drug2_id) values(2, 1)
-- error: Duplicate entry '1-2' for key 'unique_drugs'

Demo on DB Fiddle

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    Dim Findstring = IO.File.ReadAllText("C:\Users\JBP-Admin\Desktop\Pugad\Mobile Support\catch.txt")
    Dim Lookfor As String = showdat.Text

    If Findstring.Contains(Lookfor) Then
        MsgBox("Found: " & Lookfor)


    End If



End Sub

Public Sub Timer1_Tick(sender As Object, e As EventArgs) Handles DateAndTime.Tick
    DateAndTime.Start()
    ' Me.Text = DateAndTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt")
    showdat.Text = Format(Now, "MM/dd/yyyy hh:mm:ss tt")
End Sub

Private Sub Label1_Click(sender As Object, e As EventArgs) Handles showdat.Click