我在做mysql列表分区。我的表格数据如下
for(var i:int = 1; i <= 5; i++)
{
var file:File;
file = File.documentsDirectory.resolvePath("myApp/" + this["folder" + i] + "/playinfo.txt");
var stream:FileStream = new FileStream();
stream.open(file, FileMode.WRITE);
stream.writeUTFBytes("something");
stream.close();
}
在上表----------------------------------------
id | unique_token | city | student_name |
----------------------------------------
1 | xyz |mumbai| sanjay |
-----------------------------------------
2 | abc |mumbai| vijay |
----------------------------------------
3 | def | pune | ajay |
----------------------------------------
列中有一个唯一键,我想用city列进行列表分区。根据mysql文档,每个分区列必须是表的每个唯一键的一部分,因此为了使用city列进行列表分区,我必须创建新的唯一键unique_token
。
现在问题是unique_token列应该是唯一的,如果我在表中插入两行unique_key(unique_token,city)
,那么这些行将被插入到表中,但是unique_token列根本不会是唯一的
我想知道如何在此表上进行列表分区而不会在unique_token列中有重复数据?
答案 0 :(得分:2)
MySQL的PARTITION
实施存在局限性。特别是,没有FOREIGN KEYs
和没有UNIQUE
密钥,除非它们恰好包含&#34;分区键&#34;。存在这些限制是因为实施它们的成本不可接受。反过来,这是由每个分区本质上是一个单独的表&#39;以及它自己的索引引起的。没有&#34;索引&#34;跨越整个分区集。这样一个全球指数&#39;会使FK和UNIQUE
密钥可行且高效。 可能版本为5.8。
与此同时,让我更改您的问题&#34; 如何进行LIST
分区......&#34;到&#34; 为什么进行LIST
分区?&#34;。对于PARTITION BY LIST
,我知道没有效用 - 不是表现,不是方便,不是别的。如果您有理由想要这样做,请解释。我很乐意改变我对分区的负面态度。 (我知道PARTITION BY RANGE
的只有4个用例,但那是另一个主题。)
答案 1 :(得分:0)
最好为(unique_token和city)列提供复合主键
alter table table_name add constraint constraint_name primary key(unique_token和city)。