首页 > 解决方案 > MySQL 检查约束违规

问题描述

我正在使用 Oracle SQL Developer 创建一个 MySQL 数据库。

我为货币创建了一个表,其中Currency_Code列应包含三个字符(仅限字母),大写货币代码。

当我尝试添加一个值时,它说约束CHK_Currency_Code_1已被违反,但我不确定为什么。

我对 SQL 很陌生。这是脚本:

CREATE TABLE IF NOT EXISTS Currency (
    Currency_Code CHAR(3) NOT NULL UNIQUE,
    PRIMARY KEY ( Currency_Code ),
    CONSTRAINT CHK_Currency_Code_1 CHECK ( Currency_Code LIKE '[a-z][a-z][a-z]' ),
    CONSTRAINT CHK_Currency_Code_2 CHECK ( Currency_Code = UPPER( Currency_Code ) )
);

INSERT INTO Currency (Currency_Code)
VALUES ('USD');

标签: mysqlsqlcheck-constraints

解决方案


你的正则表达式约束,

CONSTRAINT CHK_Currency_Code_1 CHECK ( Currency_Code LIKE '[a-z][a-z][a-z]' )

只允许小写,将其转换为只允许大写。

CONSTRAINT CHK_Currency_Code_1 CHECK ( Currency_Code LIKE '[A-Z][A-Z][A-Z]' )

现在,当您运行插入时,它将通过,因为“USD”是大写的。


推荐阅读