Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

359
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda