Mariadb 不能在check子句中使用函数或表达式

Mariadb 不能在check子句中使用函数或表达式,mariadb,check-constraints,Mariadb,Check Constraints,我对mariadb 10.3.6中的检查约束有问题 例如,使用此表: create or replace table usuarios ( cedula int not null, contraseña varchar(15) not null, nombre varchar(15) not null, apellido varchar(15) not null); 通过这些功能: create function contr_usuario(dato varch

我对mariadb 10.3.6中的检查约束有问题

例如,使用此表:

create or replace table usuarios (
    cedula int not null,
    contraseña varchar(15) not null,
    nombre varchar(15) not null,
    apellido varchar(15) not null);
通过这些功能:

create function contr_usuario(dato varchar(15)) returns int
begin
    return(select dato regexp '^[[:alnum:]]*$');
end;//

create function nom_apell_usuario(dato varchar(25)) returns int
begin
    return (select dato regexp '^[[:alpha:]]*$|(^[[:alpha:]]+[ ]+ 
    [[:alpha:]]*$)');
end;//
我试试这个:

alter table usuarios
add constraint pk_usuarios primary key (cedula);

alter table usuarios
add constraint ck_cedula check (500000 <= cedula and cedula <= 10000000);

alter table usuarios
add constraint ck_contraseña check (contr_usuario(contraseña) = 1);

alter table usuarios
add constraint ck_nom_usuario check (nom_apell_usuario(nombre) = 1);

alter table usuarios
add constraint ck_apell_usuario check (nom_apell_usuario(apellido) = 1);
那么,如果不允许使用函数和表达式,如何设置检查约束


Obs:之前我在mariadb 10.1中尝试过这一点,尽管在我插入数据时相同的代码运行没有问题检查约束不起作用

因为您的函数只包含一个表达式,所以您可以将该表达式直接拉入检查约束表达式中

alter table usuarios
add constraint ck_contraseña check (contraseña regexp '^[[:alnum:]]*$');

alter table usuarios
add constraint ck_nom_usuario check (nombre regexp '^[[:alpha:]]*$|(^[[:alpha:]]+[ ]+[[:alpha:]]*$)');

alter table usuarios
add constraint ck_apell_usuario check (apellido regexp '^[[:alpha:]]*$|(^[[:alpha:]]+[ ]+[[:alpha:]]*$)');
alter table usuarios
add constraint ck_contraseña check (contraseña regexp '^[[:alnum:]]*$');

alter table usuarios
add constraint ck_nom_usuario check (nombre regexp '^[[:alpha:]]*$|(^[[:alpha:]]+[ ]+[[:alpha:]]*$)');

alter table usuarios
add constraint ck_apell_usuario check (apellido regexp '^[[:alpha:]]*$|(^[[:alpha:]]+[ ]+[[:alpha:]]*$)');