mysql - MySql中如何正确处理长键约束(超过3072)?

标签 mysql sql database database-design

我可以看到SO上有关于这个问题的类似问题和答案。 我需要对 7 列一起创建唯一约束。

alter table ga_data_model add constraint uq_1234596 unique (portal_id,date,dimension,country,os,os_version,theme);

有多种使用前缀键来解决此问题的答案。但是,由于数据的性质,仅使用前一个或两个字符来创建索引是危险的,因为这可能会导致重复的结果。所以这样的解决方案对我来说不起作用:


alter table ga_data_model add constraint uq_1234596 unique (portal_id,date(2),dimension(2),country(1),os(2),os_version(1),theme(2));

我正在考虑在表中创建一个新列,其中包含这些列的计算哈希值,并且我对此创建了约束。但这意味着每次我想向数据库插入一些内容时,我需要首先对此列进行选择,计算新值的哈希值,比较它们并保存/或不保存。考虑到我将进行大量的写入操作,我认为这有点太昂贵了。

有人遇到过同样的问题并且有更好的解决方案吗?正如我上面所解释的? 谢谢!

最佳答案

I want to insert something into db, I need to first do a select for this column, calculated the hash for the new values, compare them and save/or not save

不 - 您保存它,如果您遇到唯一 key 违规,那么您已经拥有了数据。另外,将哈希计算实现为表触发器 - 这样就没有修改数据的后门。

关于mysql - MySql中如何正确处理长键约束(超过3072)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26115782/

相关文章:

基于字母代码的 PHP/SQL ID

java - 关系数据库——删除还是不删除?

json - 如何为 Firestore 创建大量示例数据?

mysql - 无法修复 mysql 查询中的语法错误

php - 根据带有 unix 时间戳的月份和年份选择总和

mysql - 从 SQL 中的四个相关表中获取最小值

Mysql:2个具有唯一ID的表

mysql - 使用多个选择器从 SQL 中的一组中选择一行

sql - 实现软删除的最佳方式是什么?

mysql - 如果发生 MySQL/InnoDB 'lock wait timeout',锁在空闲时是否仍会被授予?