mariadb - 无法在 Mariadb 中使用函数调用添加约束检查

标签 mariadb constraints

我在Ubuntu 18.04上使用的是Mariadb 10.4.10,工具客户端是DBeaver 6.2.5

我想充分利用 Mariadb 中的约束检查功能来确保数据完整性,因为它是从 10.2.1 开始强制执行的。

但是,每当我尝试向现有表中添加新约束时,都会出现错误。

我试过的查询是这样的:

ALTER TABLE mydb.users ADD CONSTRAINT `username_minlen`
  CHECK (CHAR_LENGTH(username) >= 6);

错误信息是这样的:

SQL Error [4025] [23000]: (conn=47) CONSTRAINT username_minlen failed for mydb.users

我的猜测是 CHAR_LENGTH 是问题的原因,因为当我像这样运行查询时:

ALTER TABLE mydb.users ADD CONSTRAINT `username_no_empty_str`
  CHECK (username <> '');

这工作得很好。

我想知道我是否根本无法在 CHECK 表达式中调用任何函数或过程,但谷歌搜索没有给我满意的答案,其中大部分与 Mariadb 以外的其他 SQL 系统有关。

在 Mariadb 中调用函数在语法上是不可能的吗?

最佳答案

你应该首先检查你是否有违反它的数据:

SELECT *
FROM `mydb`.`users`
WHERE CHAR_LENGTH(username) < 6;

然后更新它:

UPDATE `mydb`.`users`
SET username = ?
WHERE CHAR_LENGTH(username) < 6;

最后应用检查约束:

ALTER TABLE mydb.users ADD CONSTRAINT `username_minlen` CHECK (CHAR_LENGTH(username) >= 6);

关于mariadb - 无法在 Mariadb 中使用函数调用添加约束检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010447/

相关文章:

mysql - 今天结束了在 MySQL 中进行比较

mysql - 奇怪的 MySQL 复制更新错误 (Magento)

php - 克隆表行在 php 中失败,但通过 sql shell 成功

mysql - 无法重新启动 mariadb.service : Unit mariadb. 找不到服务

grails - GORM在删除时多对一关系中将外键设置为null

ios - 自动布局比例间距

mysql - 寻找 MariaDB 的 COLUMN_ADD 函数的 PHP 或 MySQL 等价物

sql - 有条件地限制一个表字段不被引用到另一个表?

ios - UIScrollView 高度不根据 View 大小动态更新?

ios - 将尝试通过打破约束来恢复(但不确定为什么我的约束是错误的)