如何在MySQL中反转/翻转TinyInt或Boolean列的值

当某人在数据库中创建一个表时, 通常该表的结构对于任何人都应该易于阅读, 但是根据开发人员的经验, 由于很难进行心理映射, 使用它可能会变得混乱。想象一下一个表, 其中一个列为is_default, 其可能值为1或0(是或否), 例如以下表human_values:

id HUMAN_VALUE is_default
1 honesty 1
2 tolerance 1
3 patience 1
4 hatred 0
【如何在MySQL中反转/翻转TinyInt或Boolean列的值】在这种情况下, 人类必须honesty, 宽容和耐心, 通常不应该恨任何人。嗯, 这不是问题, 因为你可以理解表, 除非有人决定将表单的逻辑更改为is_default而不是is_optional。 is_optional列的值仍与旧的is_default命名法相同。由于该列中的所有值均未完成新的命名法, 因此它们将是错误的。现在, 逻辑将相反:
id HUMAN_VALUE is_optional
1 honesty 1
2 tolerance 1
3 patience 1
4 hatred 0
根据这张表, 现在的人类不能honesty, 宽容或耐心, 应该憎恨。为了解决这个问题, 你可以轻松地使用一个查询来反转列的值, 例如, 要翻转human_values表的每一行的所有is_optional列值, 可以使用以下查询语法:
/** Invert all the values of the specified column **/ UPDATE tableName SET `your_boolean_or_tiny_int_field` = NOT `your_boolean_or_tiny_int_field`

要更改行值, 我们将使用UPDATE语句, 指示应修改特定的表。然后, 使用SET语句定义分配其相同值但在NOT条件之前添加字段的新值。 NOT是取反的条件, 在这种情况下, 它有助于反转列的当前值, 例如0现在为1, 1为0。
对于我们的表human_values, 查询应类似于:
/** Invert all the values of the is_optional column **/ UPDATE human_values SET `is_optional` = NOT `is_optional`

运行上一个查询将更新表的所有4行, 并保留以下结构:
id HUMAN_VALUE is_optional
1 honesty 0
2 tolerance 0
3 patience 0
4 hatred 1
如你所见, 所有零都转换为1, 反之亦然。请记住, 示例查询修改了所有行, 你可以根据需要添加WHERE语句来限制修改后的行。
编码愉快!

    推荐阅读