主鍵重復(fù)是什么意思 MySQL分庫分表之后,id主鍵如何處理?
MySQL分庫分表之后,id主鍵如何處理?我從分庫分表存在的問題和怎么做來回答一下這個(gè)問題。。一,分庫分表的ID主鍵不能依賴于數(shù)據(jù)庫的自增,因?yàn)槎鄮熘袝?huì)重復(fù)!通常使用外接的數(shù)據(jù)組件獲取全局唯一的ID:
MySQL分庫分表之后,id主鍵如何處理?
我從分庫分表存在的問題和怎么做來回答一下這個(gè)問題。。
一,分庫分表的ID主鍵不能依賴于數(shù)據(jù)庫的自增,因?yàn)槎鄮熘袝?huì)重復(fù)!
通常使用外接的數(shù)據(jù)組件獲取全局唯一的ID:比如加強(qiáng)型UUID(根據(jù)Ip,時(shí)間戳等得到)和使用Redis(RedisAtomicLong)和zookeeper的API獲取,Twitter的雪花算法等等!
二,分庫分表之后的連接查詢比較困難!
問題沒法避免,通常拆分SQL,使用多次查詢,用查到的結(jié)果再分別查別的結(jié)果!
三,分布式事務(wù)的數(shù)據(jù)一致性很難保證!
可以使用TCC編程模型保證兩處的事務(wù)都能正確提交,但是這種方式對(duì)代碼的侵入比較重!也可以使用基于消息的數(shù)據(jù)一致性保證!
四,多數(shù)據(jù)的排序,分組,統(tǒng)計(jì)會(huì)比較困難!
1,用多線程,對(duì)多個(gè)節(jié)點(diǎn)分別查詢,然后匯總!
2,也可以提前冗余查詢表,將所有的經(jīng)常查詢的重點(diǎn)數(shù)據(jù)提前統(tǒng)一到個(gè)庫表里!
分庫分表涉及到的知識(shí)點(diǎn)比較多,建議使用專門的分庫分表組件!本人有mycat使用經(jīng)驗(yàn),如果您有相關(guān)問題,歡迎前來探討!
access中,怎樣刪除重復(fù)記錄然后設(shè)置主鍵?
需要添加主鍵的字段或字段組合下面含有重復(fù)的記錄,所以不能添加主鍵。解決辦法是刪除有重復(fù)的記錄后再添加主鍵。例如先運(yùn)行下列SQL查詢語句刪除某字段(假設(shè)字段名為col1)有重復(fù)的記錄:DELETE *FROM tableName AS aWHERE exists(select 1 from tablename b where a.col1=b.col1 group by b.col1 having count(b.col1)>1)跟著運(yùn)行下列表定義SQL語句就可以將該字段設(shè)置主鍵:alter table tableName add constraint c_Pk primary key (col1)當(dāng)然刪除重復(fù)記錄后,也可以手動(dòng)為字段(col1)設(shè)置主鍵 ——于表設(shè)計(jì)視圖,選擇字段“COL1”,然后點(diǎn)擊工具欄上的那個(gè)“鑰匙”圖標(biāo)即可。