Oracle SQL如何修改列设置约束仅允许输入Y或N两个值
Oracle数据库comm字段取值限制解决方案
你使用的是Oracle语法的表结构,无需使用MODIFY修改列属性,直接新增CHECK约束即可实现comm字段仅允许存入Y/N的需求,操作如下:
第一步:校验存量数据
先确认现有数据中没有不符合规则的取值,避免加约束失败:SELECT * FROM store_reps WHERE comm NOT IN ('Y', 'N');若查询返回结果,先修正异常数据后再执行后续操作。
第二步:添加CHECK约束
执行以下语句新增校验规则:ALTER TABLE store_reps ADD CONSTRAINT chk_store_reps_comm CHECK (comm IN ('Y', 'N'));其中
chk_store_reps_comm为自定义约束名,可根据自身命名规范调整。
如果你的库是Oracle 11g及更早版本,且表数据量很大,可加ENABLE NOVALIDATE参数仅校验新写入数据,跳过存量数据校验减少锁表时间:ALTER TABLE store_reps ADD CONSTRAINT chk_store_reps_comm CHECK (comm IN ('Y', 'N')) ENABLE NOVALIDATE;第三步:验证约束生效
可通过测试写入验证规则是否生效:-- 写入非法值会触发约束报错,执行失败 INSERT INTO store_reps (rep_id, LastN, FirstN, comm) VALUES (1, '测试', '甲', 'X'); -- 写入合法值可正常执行 INSERT INTO store_reps (rep_id, LastN, FirstN, comm) VALUES (2, '测试', '乙', 'N');
内容的提问来源于stack exchange,提问作者Laser
相关产品推荐
相关产品推荐

