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

Check Constraint

Estas en el tema de Check Constraint en el foro de Mysql en Foros del Web. Quiero hacer una regla CHECK a partir de un campo de otra tabla no se si eso sea posible?...
  #1 (permalink)  
Antiguo 30/08/2010, 16:19
 
Fecha de Ingreso: agosto-2010
Ubicación: Mexico
Mensajes: 180
Antigüedad: 14 años, 3 meses
Puntos: 0
Check Constraint

Quiero hacer una regla CHECK a partir de un campo de otra tabla no se si eso sea posible?
  #2 (permalink)  
Antiguo 30/08/2010, 17:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Check Constraint

No existen en MySQL las restricciones de ese tipo. Esas las tiene, por ejemplo Oracle.
Lo que puedes hacer es implementar ese campo como FK de la otra tabla, o bien realizar el proceso en un stored procedure.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 31/08/2010, 10:38
 
Fecha de Ingreso: agosto-2010
Ubicación: Mexico
Mensajes: 180
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Check Constraint

osea que lo mejor que puedo hacer es incluir un campo de control dentro de la pagina principal
  #4 (permalink)  
Antiguo 31/08/2010, 10:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Check Constraint

Hasta la fecha estaba totalmente convencido que NOT NULL es en realidad un ckeck constraint para un campo determinado (Independiente del RDBMS utilizado... Por lo menos en Oracle y Postgresql es así).

Cuando se listan las constraints en mysql, solo hace alusión a las UNIQUE,PRIMARY y FOREIGN KEYS.

Es posible que realmente sean check constraints pero que no sean mostrados debido a que aún mysql no soporta todas las ventajas de este tipo de constraint.

Volviendo al tema, esta validación es mejor que la realices a nivel de aplicación.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 31/08/2010, 11:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Check Constraint

Creo que a lo que se refería es a las CHECK CONTRAINT que aparecen, por ejemplo, en SQL Server como:
Código SQL:
Ver original
  1. CREATE TABLE CheckTbl (col1 INT, col2 INT);
  2. GO
  3. CREATE FUNCTION CheckFnctn()
  4. RETURNS INT
  5. AS
  6. BEGIN
  7.    DECLARE @retval INT
  8.    SELECT @retval = COUNT(*) FROM CheckTbl
  9.    RETURN @retval
  10. END;
  11. GO
  12. ALTER TABLE CheckTbl
  13. ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1 );
  14. GO

O bien las de Oracle:
Código SQL:
Ver original
  1. CREATE TABLE suppliers
  2. (   supplier_id     NUMERIC(4),    
  3.     supplier_name   varchar2(50),  
  4.     CONSTRAINT check_supplier_id
  5.     CHECK (supplier_id BETWEEN 100 AND 9999)
  6. );

Por eso decía o que no estás implementadas en MySQL: no existen aún ese tipo de CONSTRAINT. AL menos hasta ahora.
Desde luego que un NOT NULL es una constraint, pero no en el sentido de estas dos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 31/08/2010, 12:24
 
Fecha de Ingreso: agosto-2010
Ubicación: Mexico
Mensajes: 180
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Check Constraint

Quiero algo como lo siguiente pero usando el campo de una 2da tabla

Cita:
Iniciado por gnzsoloyo Ver Mensaje

Código SQL:
Ver original
  1. CREATE TABLE suppliers
  2. (   supplier_id     NUMERIC(4),    
  3.     supplier_name   varchar2(50),  
  4.     CONSTRAINT check_supplier_id
  5.     CHECK (supplier_id BETWEEN 100 AND 9999)
  6. );
  #7 (permalink)  
Antiguo 31/08/2010, 12:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Check Constraint

¿Entendiste que no existe eso en MySQL?

No existe.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 31/08/2010, 12:46
 
Fecha de Ingreso: agosto-2010
Ubicación: Mexico
Mensajes: 180
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Check Constraint

si lo entiendo, por lo tanto lo pongo todo en una tabla.
Muchas gracias
  #9 (permalink)  
Antiguo 31/08/2010, 13:03
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años
Puntos: 11
Respuesta: Check Constraint

Quizá te puedan servir los tipos de campo enum y set. Ver:

http://otroblogmas.com/diferencias-e...-set-en-mysql/
  #10 (permalink)  
Antiguo 31/08/2010, 13:17
 
Fecha de Ingreso: agosto-2010
Ubicación: Mexico
Mensajes: 180
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Check Constraint

mil gracias
  #11 (permalink)  
Antiguo 01/09/2010, 08:16
 
Fecha de Ingreso: agosto-2010
Ubicación: Mexico
Mensajes: 180
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Check Constraint

Quiero en la siguiente tabla agregar un CHECK () en control validando cantidad y el valor de fecha de caducidad que se trae desde el id_calidad. Se que la segunda opcion no se puede, separo la fecha de caducidad por simple funcionalidad.

CREATE TABLE `Contramar_Almacen_Compras`.`contra_direccion` (
`id_inventario` INT(8) NOT NULL AUTO_INCREMENT,
`id_insumo` INT(8) NOT NULL,
`Id_calidad` INT(8) NOT NULL,
`cantidad` DOUBLE(8,2) NOT NULL,
`control` bool,
PRIMARY KEY (`id`));
  #12 (permalink)  
Antiguo 01/09/2010, 09:27
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años
Puntos: 11
Respuesta: Check Constraint

Dado que no hay check en mysql, has visto la posibilidad de hacer esto con triggers.

Link a documentación de triggers:

http://dev.mysql.com/doc/refman/5.0/es/triggers.html

Lo que te había sugerido, usar tipos de datos set y enum no funciona para tu caso, pues trabajan con valores de tipo texto.

Etiquetas: constraint
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 10:05.