gpt4 book ai didi

mysql - 想要将 MySQL 字段的值限制在特定范围内(十进制值)

转载 作者:可可西里 更新时间:2023-11-01 06:46:13 27 4
gpt4 key购买 nike

我想将表格某行某字段的取值限制在一个特定的范围内。是否可以将我的 relationship_level 字段限制为 [0.00 到 1.00]

目前我正在使用 DECIMAL(2,2),它不允许 DECIMAL(1,2),因为 M 必须 >= D。我假设 DECIMAL(2,2) 的数据类型实际上允许从 00.00 到 99.99 的值?

CREATE TABLE relationships (
from_user_id MEDIUMINT UNSIGNED NOT NULL,
to_user_id MEDIUMINT UNSIGNED NOT NULL,
relationship_level DECIMAL(2,2) UNSIGNED NOT NULL,
PRIMARY KEY (from_user_id, to_user_id),
FOREIGN KEY (from_user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (to_user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
INDEX relationship_from_to (to_user_id, from_user_id, relationship_level)
) ENGINE = INNODB;

有没有更好的方法来做到这一点,任何人都可以预见任何限制吗?

非常感谢!

最佳答案

您可以使用触发器在 MySQL 中模拟检查约束。

例如,如果您想要强制所有大于 1.00 的值都存储为 1.00,您可以使用 2 个触发器,如下所示:

DELIMITER $$

DROP TRIGGER IF EXISTS tr_b_ins_relationships $$

CREATE TRIGGER tr_b_ins_relationships BEFORE INSERT ON relationships FOR EACH ROW BEGIN
IF new.relationship_level > 1
THEN
SET new.relationship_level = 1;
END IF;
END $$

DELIMITER ;


DELIMITER $$

DROP TRIGGER IF EXISTS tr_b_upd_relationships $$

CREATE TRIGGER tr_b_upd_relationships BEFORE UPDATE ON relationships FOR EACH ROW BEGIN
IF new.relationship_level > 1
THEN
SET new.relationship_level = 1;
END IF;
END $$

DELIMITER ;

关于mysql - 想要将 MySQL 字段的值限制在特定范围内(十进制值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com