上一篇
场景引入:
假设你正在开发一个会员注册系统,用户名的长度限制为5个字符(比如游戏昵称或短代码),数据库设计时,你为这个字段选择了vARCHAR2(5)
数据类型,但光有长度限制还不够——用户名不能为空、不能重复、甚至需要符合特定格式(比如必须包含字母),这时候,SQL约束就是你的最佳帮手。
vARCHAR2(5)
是Oracle中常用的变长字符串类型,括号内的数字表示最大字符数(注意:5个中文或5个英文均占5个长度),与CHAR
不同,它只占用实际存储的字符空间。
CREATE TABLE users ( username VARCHAR2(5) NOT NULL );
作用:确保该字段必须有值,避免后续查询中出现NULL
导致的逻辑错误。
CREATE TABLE users ( username VARCHAR2(5) NOT NULL UNIQUE );
场景:用户名必须唯一时使用,注意:Oracle会自动为UNIQUE约束创建索引。
案例1:强制首字符为字母
CREATE TABLE users ( username VARCHAR2(5) NOT NULL, CONSTRAINT chk_username_format CHECK ( REGEXP_LIKE(username, '^[A-Za-z]') ) );
案例2:禁止纯数字
CONSTRAINT chk_not_all_digits CHECK ( NOT REGEXP_LIKE(username, '^[0-9]+$') )
CREATE TABLE orders ( status VARCHAR2(5) DEFAULT 'NEW' CONSTRAINT chk_status CHECK (status IN ('NEW', 'PAID', 'CANCEL')) );
用途:当字段可为空但希望有兜底值时使用。
一个完整的用户表示例:
CREATE TABLE users ( user_id NUMBER PRIMARY KEY, username VARCHAR2(5) NOT NULL UNIQUE, account_type VARCHAR2(5) DEFAULT 'BASIC' CONSTRAINT chk_account_type CHECK (account_type IN ('BASIC', 'PRO', 'ADMIN')), CONSTRAINT chk_username_complex CHECK ( LENGTH(username) >= 3 AND REGEXP_LIKE(username, '^[A-Za-z][A-Za-z0-9_]*$') ) );
解析:
ORA-02290
,建议在前端预先验证减少触发。 vARCHAR2(5)
仍按字符计算。 :
为vARCHAR2(5)
字段设计约束时,先确保基础规则(NOT NULL+UNIQUE),再通过CHECK实现业务逻辑,合理的约束能减少应用层代码量,让数据质量从数据库底层得到保障。
本文由 不颖然 于2025-08-02发表在【云服务器提供商】,文中图片由(不颖然)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/519660.html
发表评论