Conditional SQLite check constraint?

后端 未结 3 1594
忘了有多久
忘了有多久 2020-12-29 03:12

I have a table defined by the following SQL:

CREATE TABLE test (
  id       integer PRIMARY KEY NOT NULL UNIQUE,
  status   text NOT NULL,
  enddate  date,
          


        
相关标签:
3条回答
  • 2020-12-29 03:25
    CREATE TABLE test (
      id       integer PRIMARY KEY,
      status   text NOT NULL CHECK (status IN ('Current', 'Complete')),
      enddate  date NOT NULL
    );
    

    This will work in SQLite, with the CHECK constraint written inline. I changed double quotes to apostrophes so it can be used in PHP.

    0 讨论(0)
  • 2020-12-29 03:30

    There's nothing stopping you from having multiple CHECK constraints on a single table. IMO the simplest and most easily expandable solution:

    CHECK (status IN ("Current", "Complete"))
    CHECK (status <> "Complete" OR enddate IS NOT NULL)
    

    This uses the fact that if A then B is logically equivalent to either not A or B.

    0 讨论(0)
  • 2020-12-29 03:35

    How about:

    CHECK (status = "Current" or (status = "Complete" and enddate is not null))
    
    0 讨论(0)
提交回复
热议问题