我在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 formydb
.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/