为sql中的列设置唯一约束
Posted
技术标签:
【中文标题】为sql中的列设置唯一约束【英文标题】:set unique constraint for a column in sql 【发布时间】:2021-04-10 00:26:20 【问题描述】:我有一个 sql 表,我在一列中存储了一个 json 编码值。现在我想为该列的一个值设置唯一约束。有可能吗?
@AlexCollette
select version();
5.7.32-cll-lve
CREATE TABLE `sale` (
`sale_id` int(11) NOT NULL AUTO_INCREMENT,
`sale_code` longtext,
`buyer` longtext,
`guest_id` varchar(100) DEFAULT NULL,
`product_details` longtext,
`shipping_address` longtext,
`vat` longtext,
`vat_percent` varchar(10) DEFAULT NULL,
`shipping` longtext,
`payment_type` varchar(100) DEFAULT NULL,
`payment_status` longtext,
`payment_details` longtext,
`payment_timestamp` longtext,
`grand_total` longtext,
`sale_datetime` longtext,
`delivary_datetime` longtext,
`delivery_status` longtext,
`viewed` longtext,
`verify_payment_details` longtext NOT NULL,
PRIMARY KEY (`sale_id`)
) ENGINE=MyISAM AUTO_INCREMENT=344 DEFAULT CHARSET=utf8
【问题讨论】:
您能否进一步详细说明:“现在我想为该列的其中一个值设置唯一约束” json 值是否始终具有相同的格式? 不完全是,如果您使用的 JSON 不是数据库中的本机数据类型,那么对它们设置任何约束都不是明智之举。但我确实缺乏这种问题的经验。select version();
显示什么?说出你想要的实际约束是什么。显示show create table yourmysterytablename
的输出(请作为文本,而不是图像)
您可能希望重新设计该表架构并将该特定值 (mihpayid
) 考虑为单独的列 - 您不能仅通过每条记录中的一小段数据将列设置为唯一。
【参考方案1】:
您没有指定值是什么。在旧版本的 mysql 中,您不能直接在 JSON 上创建索引。但是,您可以创建一个生成的列并使用它:
alter table sale add column mihpayid text generated always as
(payment_details ->> '$.mihpayid') stored;
create unique index unq_sale_mihpayid on sale(mihpayid);
【讨论】:
以上是关于为sql中的列设置唯一约束的主要内容,如果未能解决你的问题,请参考以下文章