Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

347
Vistas
¿Hay alguna manera de hacer cumplir la restricción CHECK de MySQL para el valor calculado?

Disculpas si mi redacción es muy incómoda/no adecuada para un programador: solo soy un novato de SQL que está tomando una clase para principiantes.

Estoy usando PHPMyAdmin para diseñar una base de datos de comercio electrónico en la que la edad mínima de un cliente es de 18 años. Debido a que la edad es una columna calculada, quiero registrar el DOB y hacer cumplir una restricción CHECK. Intenté esto pero no funcionó:

 CREATE TABLE Customer( ... DOB date NOT NULL CHECK(DATEDIFF(year, CURDATE(), DOB))>=18), ...);

Recibí un error que decía:

La función o expresión 'curdate()' no se puede usar en la cláusula CHECK de DOB

¿Hay alguna manera de hacer cumplir la restricción MySQL CHECK para el valor calculado?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En MySQL, las restricciones CHECK se aplican todo el tiempo a una fila, no solo cuando se insertan o actualizan datos.

Si lee atentamente la documentación, encontrará esta "limitación":

  • Se permiten literales, funciones integradas deterministas y operadores. Una función es determinista si, dados los mismos datos en tablas, múltiples invocaciones producen el mismo resultado, independientemente del usuario conectado. Ejemplos de funciones que no son deterministas y fallan en esta definición: CONNECTION_ID(), CURRENT_USER(), NOW().

Está tratando de agregar una restricción usando una de estas funciones no deterministas. Ese es el problema.

Tenga en cuenta que esto no es realmente una "limitación". Es la definición de restricción de check . Debido a que los valores de estas funciones cambian, no hay forma de que la base de datos pueda garantizar que los datos almacenados en la fila cumplan con la restricción. Usted y podría saber que now() solo aumenta y una vez que se cumple la restricción, siempre es cierto. Es mucho más difícil para la base de datos saber eso.

Quizás la solución más simple sea usar un disparador para hacer cumplir la restricción cuando se insertan datos en la tabla.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda