DevExperience(1712)
【1】在 DML 或 DDL 語句中,不要添加 數(shù)據(jù)庫表前綴: 因?yàn)殚_發(fā)環(huán)境的數(shù)據(jù)庫表名 和 生產(chǎn)環(huán)境的數(shù)據(jù)庫表名 有可能不一樣; 這個(gè)時(shí)候就有可能報(bào) SQL 異常;造成生產(chǎn)事故;
不推薦: select * from db_name.tbl_name where ....
推薦: select * from tbl_name?
當(dāng)然了,也有可能開發(fā)環(huán)境的數(shù)據(jù)庫表名 與 ST測試環(huán)境 或 UAT測試環(huán)境的 數(shù)據(jù)庫表名 不一致;但這種錯(cuò)誤都是可以在 測試階段測試出來的。但是一旦項(xiàng)目上了生產(chǎn)環(huán)境,你就不能改了。
【2】對于開啟數(shù)據(jù)庫事務(wù)的操作: 特別要注意事務(wù)回滾。
設(shè)想這樣一個(gè)場景: 有個(gè)班級(jí)表 class_tbl, 學(xué)生表 stu_tbl, 班級(jí)表有字段 學(xué)生數(shù)量 stu_num; 當(dāng)執(zhí)行刪除學(xué)生操作時(shí),要級(jí)聯(lián)更新班級(jí)的學(xué)生數(shù)量 stu_num,其中通過學(xué)生來查詢需要更新的班級(jí)。?
方法1)先執(zhí)行刪除學(xué)生操作, 然后通過學(xué)生(多)查詢班級(jí)(一)并更新班級(jí)的 學(xué)生數(shù)量: 這個(gè)時(shí)候,更新操作不會(huì)成功,因?yàn)楦聲r(shí) 需要通過學(xué)生來查詢需要更新哪個(gè)班級(jí),但是學(xué)生記錄又被您先刪除了,所以更新失敗。。這個(gè)時(shí)候,更新失敗,事務(wù)回滾,被刪除的學(xué)生又恢復(fù)了(沒有刪除)。。
所以這個(gè)時(shí)候就有一個(gè)奇怪的現(xiàn)象: 數(shù)據(jù)庫當(dāng)中明明有 這個(gè)學(xué)生記錄(事務(wù)回滾后,該學(xué)生從刪除狀態(tài)恢復(fù)到在庫狀態(tài)),那為什么無法通過該學(xué)生 去級(jí)聯(lián)更新班級(jí)的學(xué)生數(shù)量呢 ?? 那是因?yàn)槟愀虏僮髑?#xff0c;先在同一個(gè)事務(wù)中刪除了這個(gè)學(xué)生,所以這個(gè)學(xué)生是不存在的,無法執(zhí)行級(jí)聯(lián)更新。。然后事務(wù)回滾,學(xué)生在數(shù)據(jù)庫中又沒有被刪除。。。。然后你就陷入了 泥潭,久久無法自拔啊。。。
方法2)先通過學(xué)生(多)查詢班級(jí)(一)并更新班級(jí)的 學(xué)生數(shù)量,再 執(zhí)行刪除學(xué)生操作(推薦):? ?這種方法的更新班級(jí)的學(xué)生數(shù)量 和 刪除 學(xué)生記錄 的方法是比較好的,不會(huì)出現(xiàn)方法1那種 奇怪的情況;
【總結(jié)】有減必有加,所以當(dāng)你 新增學(xué)生的時(shí)候,同樣的道理: 就要先執(zhí)行更新學(xué)生數(shù)量操作,然后再執(zhí)行新增學(xué)生操作;因?yàn)樯鲜鰞蓚€(gè)操作都在同一個(gè)事務(wù)中,一旦發(fā)生異常,事務(wù)回滾,數(shù)據(jù)庫保持操作前后的數(shù)據(jù)一致性;
【3】關(guān)于數(shù)據(jù)分表權(quán)限拆分
1) 以四川省內(nèi)的地級(jí)市 和 縣級(jí)市為荔枝: 首先數(shù)據(jù)庫表通過 地級(jí)市來分表,每個(gè)地級(jí)市一張表,如成都市的數(shù)據(jù)庫表后綴suffix都是028,達(dá)州市的數(shù)據(jù)庫表后綴是 0818;
每個(gè)表有字段 行政市id city_id 字段 用于存儲(chǔ)市編號(hào),如 tbl_*_028 的 city_id=028;
2)設(shè)想這樣一種場景:因?yàn)槌啥继旄畤H機(jī)場修在簡陽市,所以作為縣級(jí)市的簡陽市,其所有數(shù)據(jù)都掛在了 成都028的數(shù)據(jù)庫表上,但通過 city_id=1214(假設(shè)簡陽的區(qū)號(hào)是1214)來標(biāo)識(shí)它是簡陽的數(shù)據(jù);
3)數(shù)據(jù)權(quán)限拆分需求: 地級(jí)市的用戶可以查看 地級(jí)市 和 旗下所有縣級(jí)市的數(shù)據(jù),而縣級(jí)市只能查看自己的縣級(jí)市的數(shù)據(jù),不能查看其它縣級(jí)市的數(shù)據(jù):
只需要通過比較 數(shù)據(jù)庫表后綴suffix 與 city_id 是否相等來判斷:
若兩者相等,則表示地級(jí)市;
若兩者不相等,則表示縣級(jí)市;
【注意】上述數(shù)據(jù)權(quán)限拆分策略非常簡單,只需要使用 mybatis 的 if 標(biāo)簽來判斷就可以了;
【4】
總結(jié)
以上是生活随笔為你收集整理的DevExperience(1712)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinking-in-java(16)
- 下一篇: 金立最新智能手机(金立智能手机介绍)