在MySql Decimal语法中表示最大1.00

时间:2014-10-06 12:54:47

标签: mysql mysql-workbench sqldatatypes

是否可以使用SQL语法来创建列,以强制列值介于两者之间 0.00至1.00

实施例

0.35 --> Correct
2.10 --> Wrong
0.05 --> Correct

对于我的列数据类型使用DECIMAL(3,2)也允许最大值9.99。

我可以将值限制在0.00到1.00之间吗?

2 个答案:

答案 0 :(得分:3)

在MySQL中,您可以定义检查约束,但它们当前未实现且没有任何效果。但是您可以在MySQL中使用触发器并检查值并在错误的情况下取消更新/插入

delimiter |
CREATE TRIGGER your_update_trigger BEFORE UPDATE ON your_table
FOR EACH ROW
BEGIN
    IF NEW.decimal_column not between 0.0 and 1.0 THEN 
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'An error occurred. Decimal value out of range';
    END IF;
END
|
delimiter ;

答案 1 :(得分:0)

只需使用约束:

ALTER TABLE TABLENAME
ADD CONSTRAINT CK_TABLENAME_COLUMNNAME_BETWEEN01 CHECK (
   COLUMNNAME >= 0 AND COLUMNNAME <= 1
)

- 更新,我没有读到你指的是mysql ...上面只适用于SQL server ------

不幸的是,MySQL不支持SQL检查约束。您可以出于兼容性原因定义它们,但它们只是被忽略。

您必须创建2个触发器BEFORE INSERTBEFORE UPDATE

DELIMITER $$
CREATE TRIGGER `insert_trigger` BEFORE INSERT ON TABLENAME
FOR EACH ROW
BEGIN
    IF NEW.COLUMNNAME not between 0.0 and 1.0 THEN
    SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Decimal value out of range';
    END IF;
END$$    


CREATE TRIGGER `update_trigger` BEFORE UPDATE ON TABLENAME
FOR EACH ROW
BEGIN
    IF NEW.COLUMNNAME not between 0.0 and 1.0 THEN 
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Decimal value out of range';
    END IF;
END$$
DELIMITER ;