如何在mysql中的json类型列上创建唯一索引?例如,我有slug属性的翻译列。我需要在translations column image
语言中使用独特的slu ..
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`root_id` int(10) unsigned NOT NULL,
`translations` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`published_from` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`published_till` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`display_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`images` longtext COLLATE utf8mb4_unicode_ci,
`deleted_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `posts_user_id_foreign` (`user_id`),
KEY `posts_root_id_foreign` (`root_id`),
CONSTRAINT `posts_root_id_foreign` FOREIGN KEY (`root_id`) REFERENCES `roots` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `posts_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `admins` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
答案 0 :(得分:0)
JSON不能替代RDBMS的功能。
在插入行时,提取" slug属性"并将其放入一个声明为UNIQUE
的单独列中。虽然它需要更多的工作,但从长远来看它会更清洁,更有效。
同样经常需要过滤或排序的任何其他列。 (不要对所有专栏都这样做。)