Jeśli używasz wielu kolumn w unikalnym indeksie i co najmniej jedna z tych kolumn jest obowiązkowa (tj. Wymagane pole formularza), jeśli ustawisz inne kolumny w indeksie na NULL, możesz skończyć ze zduplikowanymi wierszami. Jest tak, ponieważ wartości NULL są ignorowane w unikalnych kolumnach. W takim przypadku użyj pustych ciągów w innych kolumnach unikalnego indeksu, aby uniknąć powielania wierszy.
KOLUMNY W UNIKALNYM INDEKSIE:
(typ_zdarzenia, tytuł_zdarzenia, data, lokalizacja, adres URL)
PRZYKŁAD 1:
(1, „BBQ”, „2018-07-27”, null, null)
(1, „BBQ”, „2018-07-27”, null, null) // dozwolone i powielone.
PRZYKŁAD 2:
(1, „BBQ”, „2018-07-27”, „”, „”)
(1, „BBQ”, „2018-07-27”, „”, „”) // NIE jest dozwolone, ponieważ jest duplikowane.
Oto kilka kodów:
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;
Teraz wstaw to, aby zobaczyć, że pozwoli duplikować wiersze:
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);
Teraz wstaw to i sprawdź, czy nie jest dozwolone:
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', '', '');
Zatem nie ma tu ani dobra, ani zła. To Ty decydujesz, co najlepiej pasuje do twoich reguł biznesowych.