【问题标题】:Cannot validate data using complex check constraint case in mysql 7无法使用 mysql 7 中的复杂检查约束案例验证数据
【发布时间】:2021-11-12 18:31:36
【问题描述】:
ALTER TABLE
    src_branches ADD CONSTRAINT bmod_to_id_check(
        CASE WHEN bmod 7 THEN CASE WHEN id BETWEEN 0 AND 2 THEN 1 ELSE 0
        CASE WHEN bmod 6 THEN CASE WHEN id BETWEEN 600 AND 699 THEN 1 ELSE 0
        CASE WHEN bmod 5 THEN CASE WHEN id BETWEEN 500 AND 599 THEN 1 ELSE 0
        CASE WHEN bmod 4 THEN CASE WHEN id BETWEEN 400 AND 499 THEN 1 ELSE 0
        CASE WHEN bmod 3 THEN CASE WHEN id BETWEEN 300 AND 499 THEN 1 ELSE 0
        CASE WHEN bmod 2 THEN CASE WHEN id BETWEEN 2 AND 300 THEN 1 ELSE 0
        CASE WHEN bmod 1 THEN CASE WHEN id BETWEEN 2 AND 300 THEN 1 ELSE 0
    END ELSE 1
END = 1
);

// 我的目标是当 bmod = some integer 时将我的 id 保持在一个设定的范围内 // 我对替代品持开放态度

【问题讨论】:

    标签: validation mariadb constraints case


    【解决方案1】:

    注意CASE运算符的语法:

    ALTER TABLE
        src_branches ADD CONSTRAINT bmod_to_id check(
        case bmod when 7 then id BETWEEN 0 AND 2
        when 6 then id BETWEEN 600 AND 699
        when 5 then id BETWEEN 500 AND 599
        when 4 then id BETWEEN 400 AND 499
        when 3 then id BETWEEN 300 AND 499
        when 2 then id BETWEEN 2 AND 300
        when 1 then id BETWEEN 2 AND 300
        else 0
        end)
    

    所以id BETWEEN x AND y 是一个为真 (1) 或假 (0) 的表达式。

    也要注意constraint syntax

    参考:fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多