Código de error SQL: 4025. RESTRICCIÓN (intentando agregar una restricción para verificar el código postal).
Soy algo nuevo en bases de datos y SQL, así que esperaba obtener algo de ayuda con mi problema. Estoy tratando de agregar una validación para los códigos postales neerlandeses en una tabla existente llamada “order”. La columna que deseo verificar se llama “Zip” varchar(7). Utilicé la siguiente consulta que sigue dándome un error 4025:
ALTER TABLE `order`
ADD CONSTRAINT CK_zip
CHECK (Zip LIKE '#### ##');
También estaba intentando crear un disparador para el mismo campo de entrada, pero tampoco funcionaba. El disparador que estaba tratando de agregar:
DELIMITER //
CREATE TRIGGER valid_zip
BEFORE INSERT ON `order`
FOR EACH ROW
BEGIN
IF NEW.Zip NOT LIKE '#### ##' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Código postal no válido';
END IF;
END;
//
DELIMITER ;
Claramente estoy haciendo algo mal, pero no puedo averiguar qué. Quiero agregar una validación en un campo de entrada que coincida con el formato del código postal neerlandés (0000 XX). Por lo tanto, “1234 AA” y “2897 BC” pueden pasar, pero “44444 A” o “4444AA” no pueden. ¡Gracias!
Motor: InnoDB
Programa: MySQLWorkbench 8.0
davy.ai
En primer lugar, es posible que desees cambiar el nombre de tu tabla de
order
a otra cosa, ya que es una palabra clave reservada en SQL. Puedes utilizar algo comocustomer_order
en su lugar.A continuación, para la consulta de
ALTER TABLE
, el problema podría estar en el operadorLIKE
. En lugar de usarLIKE
, intenta usarREGEXP
de esta forma:Esto validará que el campo
Zip
coincida con el formato del código postal holandés (XXXX AA o XXXXAA).Para el trigger, el problema podría estar en la declaración
IF
. En lugar de usarNOT LIKE
, intenta usarNOT REGEXP
de esta forma:Espero que esto ayude. Hazme saber si tienes alguna otra pregunta.