MariaDB - 无法让我的检查约束有效工作
MariaDB - Can't get my check constraint to work effectively
所以我有这个代码:
基本上,我希望能够在不需要评论的情况下插入任何类型的评级。但是,除非留下评级,否则不能留下评论。例如,insert into movie_rating(movie_quality_rating) values(1);
将产生此错误:ERROR 4025 (23000): CONSTRAINT movie_rating.theatre_food_comment failed for test_db.movie_rating
.
这是我想要完成的逻辑(评级必须与其相关评论相关。例如电影评论与电影评级:
rating without comment = yes
comment without ratting = no
comment with rating = yes
抱歉,如果我浪费了任何人的时间,但我已经坚持了好几天,而且我几乎是一个菜鸟,并尝试到处搜索,但这是我最后的选择。我感谢任何帮助。谢谢。
使用table级检查约束来测试多列。
CREATE TABLE movie_rating (
customer int NOT NULL AUTO_INCREMENT,
movie_quality_rating int(1) CHECK (movie_quality_rating between 1 and 10),
movie_quality_comment varchar(255),
theatre_food_rating int(1) CHECK (theatre_food_rating between 1 and 10),
theatre_food_comment varchar(255),
overall_rating int(1) CHECK (overall_rating between 1 and 10),
overall_comment varchar(255),
CHECK (movie_quality_comment IS NULL OR movie_quality_rating IS NOT NULL),
CHECK (theatre_food_comment IS NULL OR theatre_food_rating IS NOT NULL),
CHECK (overall_comment IS NULL OR overall_rating IS NOT NULL),
PRIMARY KEY (customer)
);
所以我有这个代码:
基本上,我希望能够在不需要评论的情况下插入任何类型的评级。但是,除非留下评级,否则不能留下评论。例如,insert into movie_rating(movie_quality_rating) values(1);
将产生此错误:ERROR 4025 (23000): CONSTRAINT movie_rating.theatre_food_comment failed for test_db.movie_rating
.
这是我想要完成的逻辑(评级必须与其相关评论相关。例如电影评论与电影评级:
rating without comment = yes
comment without ratting = no
comment with rating = yes
抱歉,如果我浪费了任何人的时间,但我已经坚持了好几天,而且我几乎是一个菜鸟,并尝试到处搜索,但这是我最后的选择。我感谢任何帮助。谢谢。
使用table级检查约束来测试多列。
CREATE TABLE movie_rating (
customer int NOT NULL AUTO_INCREMENT,
movie_quality_rating int(1) CHECK (movie_quality_rating between 1 and 10),
movie_quality_comment varchar(255),
theatre_food_rating int(1) CHECK (theatre_food_rating between 1 and 10),
theatre_food_comment varchar(255),
overall_rating int(1) CHECK (overall_rating between 1 and 10),
overall_comment varchar(255),
CHECK (movie_quality_comment IS NULL OR movie_quality_rating IS NOT NULL),
CHECK (theatre_food_comment IS NULL OR theatre_food_rating IS NOT NULL),
CHECK (overall_comment IS NULL OR overall_rating IS NOT NULL),
PRIMARY KEY (customer)
);