Jika Anda menggunakan beberapa kolom dalam indeks unik dan setidaknya salah satu dari kolom ini adalah wajib (yaitu bidang formulir yang diperlukan), jika Anda mengatur kolom lain dalam indeks ke NULL, Anda mungkin berakhir dengan baris duplikat. Itu karena nilai NULL diabaikan dalam kolom unik. Dalam hal ini, gunakan string kosong di kolom lain dari indeks unik untuk menghindari baris yang digandakan.
KOLOM DALAM INDEKS UNIK:
(event_type_id, event_title, tanggal, lokasi, url)
CONTOH 1:
(1, 'BBQ', '2018-07-27', null, null)
(1, 'BBQ', '2018-07-27', null, null) // diizinkan dan digandakan.
CONTOH 2:
(1, 'BBQ', '2018-07-27', '', '')
(1, 'BBQ', '2018-07-27', '', '') // TIDAK diizinkan karena sudah digandakan.
Berikut ini beberapa kode:
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;
Sekarang masukkan ini untuk melihatnya akan memungkinkan baris yang digandakan:
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);
Sekarang masukkan ini dan periksa apakah itu tidak diizinkan:
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', '', '');
Jadi, tidak ada yang benar atau salah di sini. Terserah Anda memutuskan mana yang paling sesuai dengan aturan bisnis Anda.