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

时间:2018-05-10 15:39:17

标签: 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 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);

但它没有用,我得到了这些错误:

ERROR 1901 (HY000) at line 138 in file: '/media/sf_marcelo/projects/control_financiero/sql_scripts/db_finanza.sql': Function or expression '`contr_usuario`()' cannot be used in the CHECK clause of `ck_contraseña`
ERROR 1901 (HY000) at line 140 in file: '/media/sf_marcelo/projects/control_financiero/sql_scripts/db_finanza.sql': Function or expression '`nom_apell_usuario`()' cannot be used in the CHECK clause of `ck_nom_usuario`
ERROR 1901 (HY000) at line 142 in file: '/media/sf_marcelo/projects/control_financiero/sql_scripts/db_finanza.sql': Function or expression '`nom_apell_usuario`()' cannot be used in the CHECK clause of `ck_apell_usuario`
Query OK, 0 rows affected (0.079 sec)

那么,如果不允许使用函数和表达式,如何制作检查约束?

Obs:以前我用mariadb 10.1尝试了这个,即使我插入数据时相同的代码运行没有问题,但是检查约束没有工作

0 个答案:

没有答案