PostgreSQL中如何ALTER COLUMN限制star_rating列取值范围为0-5
限制
star_rating列仅接受0-5整数的实现方法 首先要明确:仅靠ALTER COLUMN无法完成范围限制,ALTER COLUMN主要用于修改列的数据类型、是否可为空这类属性,而值的范围约束需要通过添加CHECK约束来实现。
主流数据库通用方案(MySQL 8.0+、PostgreSQL、SQL Server等)
直接给表添加CHECK约束,强制star_rating的值必须在0到5之间(包含边界):
ALTER TABLE my_movies ADD CONSTRAINT chk_star_rating_range CHECK (star_rating BETWEEN 0 AND 5);
添加后,任何插入或更新star_rating为负数、大于5的操作都会被数据库直接拒绝,并抛出约束违反的错误。
MySQL 5.x兼容方案(旧版本不生效CHECK约束)
如果你的MySQL版本是5.x,虽然支持CHECK语法但不会实际生效,这时候可以将列类型修改为枚举类型来实现限制:
ALTER TABLE my_movies MODIFY COLUMN star_rating ENUM('0','1','2','3','4','5') NOT NULL;
注意:这种方式会把列的类型从int改为枚举,存储的是字符串形式的数字,查询时如果需要数值运算,可能需要做类型转换。
验证约束生效
可以执行以下测试语句验证:
-- 正常插入,应该成功 INSERT INTO my_movies (movie_name, star_rating) VALUES ('测试电影', 3); -- 插入超出范围的值,应该失败 INSERT INTO my_movies (movie_name, star_rating) VALUES ('无效评分电影', 6);
内容的提问来源于stack exchange,提问作者Joe Lee
相关产品推荐
相关产品推荐

