是否可以使用SQL语法来创建列,以强制列值介于两者之间 0.00至1.00
实施例
0.35 --> Correct
2.10 --> Wrong
0.05 --> Correct
对于我的列数据类型使用DECIMAL(3,2)也允许最大值9.99。
我可以将值限制在0.00到1.00之间吗?
答案 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 INSERT
和BEFORE 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 ;