You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL入门者求助:如何为User表Password字段添加指定字符约束

为User表的Password字段添加CHECK约束方案

要实现密码仅由字母、数字和下划线组成的校验,不同SQL数据库的CHECK约束写法略有差异,以下是主流数据库的实现方式:

PostgreSQL

使用正则匹配操作符~,约束语句如下:

-- 给已存在的表添加约束
ALTER TABLE "User"
ADD CONSTRAINT TABLE_PASSWORD CHECK (password ~ '^[a-zA-Z0-9_]+$');

-- 建表时直接添加约束
CREATE TABLE "User" (
    id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(100) NOT NULL,
    CONSTRAINT TABLE_PASSWORD CHECK (password ~ '^[a-zA-Z0-9_]+$')
);

说明:^[a-zA-Z0-9_]+$表示密码必须从开头到结尾都由允许的字符组成,+确保密码至少有一个字符(若允许空密码可替换为*)。

MySQL(8.0.16及以上版本)

MySQL 8.0.16开始正式支持CHECK约束生效,使用REGEXP函数:

-- 给已存在的表添加约束
ALTER TABLE `User`
ADD CONSTRAINT TABLE_PASSWORD CHECK (password REGEXP '^[a-zA-Z0-9_]+$');

-- 建表时直接添加约束
CREATE TABLE `User` (
    id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(100) NOT NULL,
    CONSTRAINT TABLE_PASSWORD CHECK (password REGEXP '^[a-zA-Z0-9_]+$')
);

SQL Server

使用PATINDEX函数查找非法字符,若不存在则符合条件:

-- 给已存在的表添加约束
ALTER TABLE [User]
ADD CONSTRAINT TABLE_PASSWORD CHECK (PATINDEX('%[^a-zA-Z0-9_]%', password) = 0);

-- 建表时直接添加约束
CREATE TABLE [User] (
    id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(100) NOT NULL,
    CONSTRAINT TABLE_PASSWORD CHECK (PATINDEX('%[^a-zA-Z0-9_]%', password) = 0)
);

说明:%[^a-zA-Z0-9_]%匹配任何不在允许集合里的字符,PATINDEX返回匹配位置,返回0表示无非法字符。

注意:User是SQL保留字,所以在不同数据库中需要用对应符号包裹(PostgreSQL用双引号、MySQL用反引号、SQL Server用方括号),避免语法错误。

内容的提问来源于stack exchange,提问作者Aeroo Kymo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:20:29