可以為這個非主鍵列建立一個分散式表,表名為主表名加該非主鍵列名(table_colum),這個新表的主鍵就是主表要建立唯一約束的非主鍵列,這樣每次往主表插入資料的時候,都先查詢這張新表,如果新表已經存在資料就說明違反唯一約束。
唯一索引的話,就是這張新表再加一列,這一列存得就是主表的主鍵。使用該唯一索引查詢的話,就是先根據列值,查詢到主表的主鍵值,再根據該主鍵值反查主表,獲取全部的內容。
上面可能說的比較抽象,我舉個例子:
在分散式資料庫上建立一張有唯一索引的表
create table t (a int primary key, b int , c int ) unique key b;
資料庫在建立這張表的同時,建立一張關聯表
create table t_b(b int primary key , a int)
這樣使用者往表t 插入資料時,資料庫相應的往關聯表插入資料
insert into t(a, b, c) values (1, 2 , 2),(2, 6, 7) , (3 , 100, 2);
//資料庫關聯插入 insert into t_b (b , a) values (2,1),(6,2) , (100, 3).
當用戶在插入重複的值時,就可以從關聯表中發現了,同時也可以用關聯表做索引
可以為這個非主鍵列建立一個分散式表,表名為主表名加該非主鍵列名(table_colum),這個新表的主鍵就是主表要建立唯一約束的非主鍵列,這樣每次往主表插入資料的時候,都先查詢這張新表,如果新表已經存在資料就說明違反唯一約束。
唯一索引的話,就是這張新表再加一列,這一列存得就是主表的主鍵。使用該唯一索引查詢的話,就是先根據列值,查詢到主表的主鍵值,再根據該主鍵值反查主表,獲取全部的內容。
上面可能說的比較抽象,我舉個例子:
在分散式資料庫上建立一張有唯一索引的表
create table t (a int primary key, b int , c int ) unique key b;
資料庫在建立這張表的同時,建立一張關聯表
create table t_b(b int primary key , a int)
這樣使用者往表t 插入資料時,資料庫相應的往關聯表插入資料
insert into t(a, b, c) values (1, 2 , 2),(2, 6, 7) , (3 , 100, 2);
//資料庫關聯插入 insert into t_b (b , a) values (2,1),(6,2) , (100, 3).
當用戶在插入重複的值時,就可以從關聯表中發現了,同時也可以用關聯表做索引