拒绝特定字符

Deny specific chars

我需要创建一个约束或类似的东西,它只允许列中的 A-Z_- 等字符。

如何做到这一点?

如果支持,您可以使用正则表达式约束。

使用 PostgreSQL 的示例如下所示:

CREATE TABLE user(
    name VARCHAR
    CONSTRAINT constraint_name CHECK (name ~* '^[A-Z_-]*$')
);

请注意,此正则表达式允许空字符串且不允许小写字符。

否则(在 MySQL 的情况下)您可以使用插入触发器:

DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON table_name
    FOR EACH ROW 
    BEGIN 
        IF (NEW.phone REGEXP '^[A-Z_-]*$' ) = 0 THEN 
          SIGNAL SQLSTATE '12345'
          SET MESSAGE_TEXT = 'Invalid content';
    END IF; 
END$$
DELIMITER ;

对于 MS SQL:

CREATE TABLE table_name(
    name VARCHAR(100) CHECK (name NOT LIKE '%[^A-Z_-]%'
))

试试这个..它在 ms sql 服务器

中运行良好
CREATE TABLE TestTable
(ID INT, FirstCol VARCHAR(100),
CONSTRAINT FirstCol CHECK (FirstCol NOT LIKE '%[^a-zA-Z\_-]%' ESCAPE '\'))