是否可以在表格中命名约束? 我面临的问题是,当一个约束没有成功时,我得到一个神秘的消息,而不是一个明确的名称,它失败了哪个约束。
我尝试过类似的事情:
primer_nombre varchar(25) NOT NULL CHECK 'is_it_valid?' (primer_nombre MATCHES '^[a-zA-Z]$' )
但这失败了。所以我卡在这里。
CREATE TABLE Usuarios
(
CI INT PRIMARY KEY,
primer_nombre varchar(25) NOT NULL CHECK (primer_nombre MATCHES '^[a-zA-Z]$' ),
segundo_nombre varchar(25),
primer_apellido varchar(25) NOT NULL,
segundo_apellido varchar(25),
grado INT CHECK ( grado > 0 AND grado < 8),
fecha_nacimiento DATE NOT NULL,
nota INT CHECK ( nota > 0 AND nota < 13),
email varchar(80),
hace_proyecto boolean,
tipo varchar(20) CHECK (tipo IN ('Admin', 'Docente', 'Alumno')),
encriptacion_hash varchar(250),
encriptacion_sal varchar(250),
baja boolean
);
530: Check constraint (admin_proyecto.c106_43) failed.
Error in line 7
Near character position 127
我想得到一个比这更明确的信息。
答案 0 :(得分:2)
扩展Erwin的答案:
CREATE TABLE Usuarios
(
CI INT PRIMARY KEY,
primer_nombre varchar(25) NOT NULL CHECK (primer_nombre MATCHES '^[a-zA-Z]$' ) CONSTRAINT constraint_primer_nombre
);
> insert into Usuarios values (1,'asd');
530: Check constraint (Administrator.constraint_primer_nombre) failed.
Error in line 1
Near character position 36
>
答案 1 :(得分:2)
SQL标准在约束&#39; body&#39;之前定位约束名称,而Informix将约束名称定位在约束主体之后。
因此,在标准SQL中,您可以编写:
…
grado INT CONSTRAINT usuarios_grado CHECK (grado > 0 AND grado < 8),
…
但是在Informix的方言中,你需要写:
…
grado INT CHECK (grado > 0 AND grado < 8) CONSTRAINT usuarios_grado,
…
答案 2 :(得分:1)
通常,SQL设计为可以为所有支持的约束分配名称。对于您正在使用的引擎的特定SQL方言,请参阅引擎的SQL Syntax手册。