Если вы используете несколько столбцов в уникальном индексе, и хотя бы один из этих столбцов является обязательным (т. Е. Обязательным полем формы), если вы установите для других столбцов индекса значение NULL, вы можете получить дублированные строки. Это потому, что значения NULL игнорируются в уникальных столбцах. В этом случае используйте пустые строки в других столбцах уникального индекса, чтобы избежать дублирования строк.
КОЛОННЫ В УНИКАЛЬНОМ ИНДЕКСЕ:
(event_type_id, event_title, дата, местоположение, URL)
ПРИМЕР 1:
(1, «Барбекю», «2018-07-27», ноль, ноль)
(1, 'BBQ', '2018-07-27', null, null) // разрешено и продублировано.
ПРИМЕР 2:
(1, «Барбекю», «2018-07-27», «,»)
(1, 'BBQ', '2018-07-27', '', '') // НЕ допускается, так как он дублируется.
Вот несколько кодов:
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`event_id` int(11) DEFAULT NULL,
`event_title` varchar(50) DEFAULT NULL,
`date` date DEFAULT NULL,
`location` varchar(50) DEFAULT NULL,
`url` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `event_id` (`event_id`,`event_title`,`date`,`location`,`url`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Теперь вставьте это, чтобы увидеть, что это позволит дублировать строки:
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-27', NULL, NULL);
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-27', NULL, NULL);
Теперь вставьте это и убедитесь, что это не разрешено:
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-28', '', '');
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-28', '', '');
Так что здесь нет правильного или неправильного. Вам решать, что лучше всего подходит для ваших бизнес-правил.