Una de las cosas que no sabía (tal vez porque no había leído la documentación con más detenimiento) es que en el momento de crear una tabla en en un manejador de base de datos, puedo agregar restricciones para mantener cierta integridad en la data al momento de que se esté populando dicha tabla. Algo bastante útil al momento de diseñar la base de datos de alguna aplicación.
Sucede que MySQL, no se si por amor al arte, decide ignorar la sentencia “CHECK” para las restricciones. Es decir, si creo la siguiente tabla:
CREATE TABLE `prueba`.`persona` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR( 50 ) NOT NULL ,
`edad` TINYINT UNSIGNED NOT NULL ,
PRIMARY KEY ( `id` ),
CHECK (`edad` < 150)
) ENGINE = MYISAM COMMENT = 'Tabla correspondiente a una persona'
Tendría algo como lo siguiente:
+--------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| nombre | varchar(50) | NO | | NULL | |
| edad | tinyint(3) unsigned | NO | | NULL | |
+--------+---------------------+------+-----+---------+----------------+
Excelente, hasta ahora…
El problema es que si trato de insertar algún record que viole dicha restriccion, MySQL simplemente lo ignorará, lo que te puede llevar a severas (muy graves) corrupciones de data en caso de que la integridad de la misma dependa directamente de las restricciones de cada tabla.
Si ejecuto la siguiente sentencia:
INSERT INTO `prueba`.`persona` (
`id` ,
`nombre` ,
`edad`
)
VALUES (
NULL , 'Don Juan de los Palotes', '190'
);
Obtendré lo siguiente:
Inserted rows: 1
Inserted row id: 4
Detallitos como estos son los que me han movido a considerar seriamente migrar para PostgreSQL.
Saludos,
Sucede que MySQL, no se si por amor al arte, decide ignorar la sentencia “CHECK” para las restricciones. Es decir, si creo la siguiente tabla:
CREATE TABLE `prueba`.`persona` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR( 50 ) NOT NULL ,
`edad` TINYINT UNSIGNED NOT NULL ,
PRIMARY KEY ( `id` ),
CHECK (`edad` < 150)
) ENGINE = MYISAM COMMENT = 'Tabla correspondiente a una persona'
Tendría algo como lo siguiente:
+--------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| nombre | varchar(50) | NO | | NULL | |
| edad | tinyint(3) unsigned | NO | | NULL | |
+--------+---------------------+------+-----+---------+----------------+
Excelente, hasta ahora…
El problema es que si trato de insertar algún record que viole dicha restriccion, MySQL simplemente lo ignorará, lo que te puede llevar a severas (muy graves) corrupciones de data en caso de que la integridad de la misma dependa directamente de las restricciones de cada tabla.
Si ejecuto la siguiente sentencia:
INSERT INTO `prueba`.`persona` (
`id` ,
`nombre` ,
`edad`
)
VALUES (
NULL , 'Don Juan de los Palotes', '190'
);
Obtendré lo siguiente:
Inserted rows: 1
Inserted row id: 4
Detallitos como estos son los que me han movido a considerar seriamente migrar para PostgreSQL.
Saludos,