Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

346
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!