Eu tenho esta definição de tabela:
CREATE TABLE `media` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`brands_id` int(11) DEFAULT NULL,
`media_type` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`title` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`description` longtext COLLATE utf8_unicode_ci NOT NULL,
`thumbnail_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`media_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`media_code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`inactive` tinyint(1) NOT NULL,
`createdAt` datetime NOT NULL,
`updatedAt` datetime NOT NULL,
`titleHtml` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`descriptionHtml` longtext COLLATE utf8_unicode_ci NOT NULL,
`useHtml` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_6A2CA10CBF396750` (`id`),
KEY `IDX_6A2CA10CE9EEC0C7` (`brands_id`),
CONSTRAINT `FK_6A2CA10CE9EEC0C7` FOREIGN KEY (`brands_id`) REFERENCES `brands` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT;
Cada vez que tento inserir um novo registro recebo um erro devido a NOT NULL
restrições, tudo bem, agora se eu tentar atualizar o mesmo registro e deixar title
e/ description
ou qualquer outro campo obrigatório vazio, o UPDATE é executado e a coluna é definido como em branco, por quê? Como posso evitar isso? Estou usando o MariaDB 5.5.46.
ATUALIZAR
Conforme solicitado pelo moderador, abaixo estão as consultas INSERT e UPDATE que tentei:
INSERT INTO media (media_type, title, titleHtml, description, descriptionHtml, thumbnail_url, media_url, media_code, inactive, useHtml, createdAt, updatedAt, brands_id) VALUES (null,"Media Title Test",null,null,null,"https://someurl",null,null,false,false,"2015-10-22 22:07:54","2015-10-22 22:07:54",null)
O INSERT acima falha porque as CONSTRAINTS no banco de dados
UPDATE media SET description = null, updatedAt = "2015-10-22 22:12:18" WHERE id = 13
O UPDATE acima passou e este é o problema porque a description
coluna não pode ter valores NULL
O problema está na configuração do seu banco de dados. MariaDB, por padrão, SQL_MODE não é STRICT e UPDATEs, mesmo que esteja definido como NOT NULL.
Mas este é um ponteiro para a resposta:
Portanto, você precisa definir o SQL_MOD apropriado conforme descrito em: https://mariadb.com/kb/en/mariadb/sql_mode/