微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL检查约束违规

如何解决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');

解决方法

您的正则表达式约束

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”大写的形式传递。

,

在 MySQL 中,您将使用正则表达式:

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 REGEXP '^[A-Z]{3}$' )
);

这假设排序规则不区分大小写。

如果你想坚持区分大小写,你可以使用BINARY

CREATE TABLE IF NOT EXISTS Currency (
    Currency_Code CHAR(3) NOT NULL UNIQUE,CONSTRAINT CHK_Currency_Code_1 CHECK ( BINARY Currency_Code REGEXP BINARY '^[A-Z]{3}$' )
);

Here 是一个数据库小提琴。

,

只需使用 REGEXP 而不是 LIKE。您正在使用正则表达式,但使用 LIKE 函数,这是错误。

 CREATE TABLE IF NOT EXISTS Currency (
        Currency_Code CHAR(3) NOT NULL UNIQUE,CONSTRAINT CHK_Currency_Code_1 CHECK ( Currency_Code REGEXP '[A-Z][A-Z][A-Z]' ),CONSTRAINT CHK_Currency_Code_2 CHECK ( Currency_Code = UPPER( Currency_Code ) )
    );
    
    INSERT INTO Currency (Currency_Code)
    VALUES ('USD');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。