drop - on delete cascade mysql
Una restricción para evitar la inserción de una cadena vacía en MySQL (2)
Normalmente lo harías con la restricción CHECK:
foo_test VARCHAR(50) NOT NULL CHECK (foo_test <> '''')
Desafortunadamente, MySQL tiene soporte limitado para las limitaciones. De MySQL Reference Manual :
La cláusula CHECK se analiza pero todos los motores de almacenamiento la ignoran.
Es por eso que tiene que usar los triggers como solución alternativa, como lo ha señalado la gente.
En el futuro, es posible que desee echar un vistazo a PostgreSQL , que se considera que tiene un mejor soporte para la integridad de datos (entre otras cosas ) por muchas personas .
En esta pregunta aprendí cómo evitar la inserción de un valor NULL. Pero, desafortunadamente, una cadena vacía se está insertando de todos modos. Además de prevenir esto en el lado de PHP, me gustaría usar algo como una restricción de base de datos para evitar esto. Por supuesto, es necesario un control en el lado de la aplicación, pero me gustaría que esté en ambos lados.
Me han enseñado que, independientemente de la aplicación que esté hablando con su base de datos, no debería poder insertar datos básicamente erróneos en ella. Asi que...
CREATE TABLE IF NOT EXISTS tblFoo (
foo_id int(11) NOT NULL AUTO_INCREMENT,
foo_test varchar(50) NOT NULL,
PRIMARY KEY (foo_id)
);
Todavía me permitiría hacer este inserto:
INSERT INTO tblFoo (foo_test) VALUES ('''');
Lo cual me gustaría prevenir.
Puede usar activadores para evitar la inserción de la banda en blanco.
No es rápido, ni muy conciso ni bonito, pero ...
Ejemplo:
Crea tu tabla:
mysql> create table yar (val VARCHAR(25) not null); Query OK, 0 rows affected (0.02 sec)
Cree su activador ''antes de insertar'' para verificar si hay una cadena en blanco y rechazar.
mysql> delimiter $ mysql> create trigger foo before insert on yar -> for each row -> begin -> if new.val = '''' then -> signal sqlstate ''45000''; -> end if; -> end;$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter ;
Intente insertar null y blankstring en su columna:
mysql> insert into yar values(""); ERROR 1644 (45000): Unhandled user-defined exception condition mysql> insert into yar values(NULL); ERROR 1048 (23000): Column ''val'' cannot be null mysql> insert into yar values ("abc"); Query OK, 1 row affected (0.01 sec) mysql> select * from yar; +-----+ | val | +-----+ | abc | +-----+ 1 row in set (0.00 sec)