Could I make a column in a table only allows one 'true' value and all other rows should be 'false'

后端 未结 4 833
遥遥无期
遥遥无期 2020-12-15 17:04

In MySQL, Can I put a restriction like below at database level?

I need to make sure 1. a specific column can only take either \'true\' or \'false\' values. 2. and e

4条回答
  •  既然无缘
    2020-12-15 17:40

    In MySQL, a unique index will ignore any NULL values. So there's a bit of a hack you could use.

    You could consider adding a nullable bit column (which can only have the value 1 or 0):

    ALTER TABLE mytable 
      ADD COLUMN `is_default` BIT NULL,
      ADD UNIQUE INDEX `is_default_UNIQUE` (`is_default` ASC);
    

    At this point, one row can be 1 (TRUE), and attempting to add another row that is also TRUE, will result in an error:

    1062: Duplicate entry '\x01' for key 'is_default_UNIQUE'
    

    The only catch is that all other rows need to be NULL and cannot be false as that would also count as a unique value.

    (This really isn't what indexes are meant to be used for though)

提交回复
热议问题