Wenn Sie mehrere Spalten in einem eindeutigen Index verwenden und mindestens eine dieser Spalten obligatorisch ist (dh ein erforderliches Formularfeld), können Sie doppelte Zeilen erhalten, wenn Sie die anderen Spalten im Index auf NULL setzen. Dies liegt daran, dass NULL-Werte in eindeutigen Spalten ignoriert werden. Verwenden Sie in diesem Fall leere Zeichenfolgen in den anderen Spalten des eindeutigen Index, um doppelte Zeilen zu vermeiden.
SPALTEN IN EINEM EINZIGARTIGEN INDEX:
(event_type_id, event_title, Datum, Ort, URL)
BEISPIEL 1:
(1, 'BBQ', '2018-07-27', null, null)
(1, 'BBQ', '2018-07-27', null, null) // erlaubt und dupliziert.
BEISPIEL 2:
(1, 'BBQ', '2018-07-27', '', '')
(1, 'BBQ', '2018-07-27', '', '') // NICHT erlaubt, da es dupliziert wird.
Hier sind einige Codes:
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;
Fügen Sie dies nun ein, um zu sehen, dass die duplizierten Zeilen zulässig sind:
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);
Fügen Sie nun dies ein und überprüfen Sie, ob es nicht erlaubt ist:
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', '', '');
Hier gibt es also kein Richtig oder Falsch. Es liegt an Ihnen, zu entscheiden, was mit Ihren Geschäftsregeln am besten funktioniert.