Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Clausula check no funciona

Estas en el tema de Clausula check no funciona en el foro de Bases de Datos General en Foros del Web. necesito que no se pueda meter el mismo valor en id y en responsable, el código funciona pero luego al insertar datos permite que los ...
  #1 (permalink)  
Antiguo 06/01/2008, 13:30
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Clausula check no funciona

necesito que no se pueda meter el mismo valor en id y en responsable, el código funciona pero luego al insertar datos permite que los dos sean iguales, alguien me aydua

CREATE TABLE `persona` (
`id` VARCHAR( 6 ) NOT NULL ,
`nombre` VARCHAR( 15) NOT NULL ,
`apellido` VARCHAR( 30 ) NOT NULL ,
`responsable` VARCHAR( 6 ) NOT NULL CHECK (`responsable` != `id`)
) ENGINE = innodb ;
  #2 (permalink)  
Antiguo 06/01/2008, 13:55
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Clausula check no funciona

He estado investigando mas y mysql acepta CHECK pero no funciona asi que tengo que hacer 1 TRIGGER, el problema es que no tengo ni idea asi de base tengo esto

CREATE TRIGGER valores BEFORE INSERT ON personal
FOR EACH ROW BEGIN
IF `id` = `responsable`
insert into personal SET responsable = NULL
END IF
end;

Última edición por Ciberyo; 06/01/2008 a las 15:10 Razón: PARA EDITAR TRIGGER
  #3 (permalink)  
Antiguo 06/01/2008, 22:38
 
Fecha de Ingreso: enero-2008
Mensajes: 197
Antigüedad: 16 años, 3 meses
Puntos: 10
Re: Clausula check no funciona

Hola Ciberyo, bueno pues si nada más lo que necesitas es que no se pueda meter el mismo valor haciéndolo como mencionas con un trigger es fácil aquí pongo el código:

create trigger hola before insert on persona
for each row
begin
if new.responsable = new.id then
set new.responsable = 'error';
end if;
end
//
delimiter ;

Antes de que lo metas a mysql unos consejos:

En tu tabla persona no tienes un campo Primary Key por lo que te recomiendo declarar el campo id not null primary key ;) esto mantiene coherencia ya que no permite duplicados en el id por lo que tus tuplas son únicas, ahora no se si en tu id persona es necesario que puedas incluir caracteres, si no los necesitas te recomiendo mejor usar campos numéricos como el Int y generación automática de claves por lo que tu campo quedaría así 'id' int not null auto increment .

Ahora sigamos... antes de que pruebes el trigger debes cambiar el delimitador ";" por "//" si no lo haces te marcará error porque queda inconclusa la declaración del trigger (llegaría hasta el final de 'error'; ) se cambia de la siguiente forma: en la línea de comandos escribes

delimiter //

después copias y pegas el código si quieres y si te fijas bien ahora vuelves a cambiar el delimitador a su forma original de punto y coma.

El trigger a grandes rasgos lo que hace es validar si el campo responsable es igual al id entonces le cambia el valor por la cadena "error" pero si ingresa el registro.

Ok pues espero te haya podido ayudar saludos y suérte !!!!! ;)
  #4 (permalink)  
Antiguo 07/01/2008, 12:36
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Clausula check no funciona

Muchas gracias, mañana o pasado lo pruebo y te comento , lo probaría hoy pero tengo que desarrollar una practica de asp también en la universidad y la llevo retrasada ^^, ya he hecho las pruebas y el código ya lo tengo sin errores, al final he creado una tabla con el código de estudiante y el de su tutor , siendo los dos juntos la clave primaria.

Muchas gracias por todo y ya te comentare en uno o dos dias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:48.