丨主鍵如何正確設置_第1頁
丨主鍵如何正確設置_第2頁
丨主鍵如何正確設置_第3頁
丨主鍵如何正確設置_第4頁
丨主鍵如何正確設置_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

今天,我就帶你在解決這個實際問題的過程中,學習下三種設置主鍵的思路:主鍵自增字段做主鍵手動賦值字段做主鍵。會員(cardno)看起來比較合適,因為會員不能為空,而且有唯一性,可以用來我們可以用下面的代碼,在創(chuàng)建表的時候,設置字段cardno為主鍵:代代123456789mysql>CREATETABLE->->cardnoCHAR(8)PRIMARYKEY,--->membername->memberphone->memberpid->memberaddress->birthday->QueryOK,0rowsaffected(0.061123456789mysql>DESCRIBE代+++++++|Field|Type|Null|Key|Default|Extra+++++++|cardno|char(8)|NO|PRI|NULL||membername|text|YES||NULL||memberphone|text|YES||NULL||memberpid|text|YES||NULL||memberaddress|text|YES||NULL|||text|YES||NULL||birthday|datetime|YES||NULL|+++++++7rowsinset(0.02可以看到,字段cardno在表示鍵值的key這一列的值是“PRI”,意思是PRIMARYKEY,這就表示它已經(jīng)被設置成主鍵了。這里需要注意的一點是,除了字段cardno,所有的字段會員做主鍵有沒有什么問題呢?我們插入2條數(shù)據(jù)來驗證下代代123456789mysql>INSERTINTO->->->->->->,->->->->->->'張三->->->->'男->'2000-01-->QueryOK,1rowaffected(0.01mysql>INSERTINTO->->->->->->,->->->->->->'李四->->->->'女->'1990-01-->QueryOK,1rowaffected(0.01代代123456789mysql>SELECT->FROM+|+||+++++|membername|memberphone|+||++||++||++||++|memberaddress|+||+2rowsinset(0.00我們發(fā)現(xiàn),不同的會員對應不同的會員,字段“cardno”如果都是這樣,會員與會員一一對應,系統(tǒng)是可以正常運行的。但是實際情況是,上線不到一周,就發(fā)生了“cardno”員存在重復使用的情況。 從系統(tǒng)設計的角度看,這個變化只是修改了會員信息表中的是“ ”信息,并不會影響到數(shù)據(jù)一致性。也就是說,修改會員是“ ”系統(tǒng)的各個模塊,都會獲取到修改后的會員信息,不會出現(xiàn)有的模塊獲取到修改之前的息,有的模塊獲取到修改后的會員信息,而導致系統(tǒng)內部數(shù)據(jù)不一致的情況。因此,從信息系統(tǒng)層面上看是沒問題的。但是從使用系統(tǒng)的業(yè)務層面來看,就有很大的問題了,會對商家造成影響。比如,我們有一個銷售流水表,記錄了所有的銷售流水明細。2020年12月01日,在門店了一本書,消費了89元。那么,系統(tǒng)中就有了買書的流水記錄,如下所代代123456789mysql>CREATEtable->->transactionno->itemnumberINT,--ty->price->salesvalue->cardnoCHAR(8),--->transdate->QueryOK,0rowsaffected(0.10代代1mysql>INSERTINTO223456789->->->->->->->->->->->->->->->->->'2020-12-->QueryOK,1rowaffected(0.012020年12月01代代123456789mysql>SELECT->FROMdemo.transAS->JOINdemo.membermasterAS->JOINdemo.goodsmasterAS->ON(a.cardno=b.cardnoAND++++++|membername|goodsnamety|salesvalue|transdate+|++++++|書|1.000|89.00|2020-12-0100:00:00+++++1rowinset(0.00我們得到的查詢結果是:,在2020年12月01日買了一本書,花了89元需要注意的是,這里我用到了JOI,是表聯(lián),是為了其的信包括會員信息表(demo.membtr)和商品信息表(dtr 代代123456789mysql>UPDATE->SETmembername=->memberphone=->memberpid=-> ->birthday='1970-01-->WHEREcardno=QueryOK,1rowaffected(0.02Rowsmatched:1Changed:1Warnings:代代123456789mysql>SELECT->FROMdemo.transAS->JOINdemo.membermasterAS->JOINdemo.goodsmasterAS->ON(a.cardno=b.cardnoAND++++++|membername|goodsnamety|salesvalue|transdate+|++++++|書|1.000|89.00|2020-12-0100:00:00+++++1rowinset(0.01 在2020年12月01日,買了一本書,消費89元 那號行不行呢?好像可以。因為決不會重復,號與一個人存在一一對也有這個問題,這也是我們在設計會員信息表的時候,允許號和都為空的原所以,我建議你盡量不要用業(yè)務字段,也就是跟業(yè)務有關的字段做主鍵id,給這個字段定義自增約束,這樣,我們就代代mysql>ALTERTABLE->DROPPRIMARYQueryOK,2rowsaffected(0.12Records:2Duplicates:0Warnings:代代mysql>ALTERTABLE->ADDidINTPRIMARYKEYQueryOK,0rowsaffected(0.12Records:0Duplicates:0Warnings:第三步,修改銷售流水表,添加新的字段memberid代代mysql>ALTERTABLE->ADDmemberidQueryOK,0rowsaffected(0.04Records:0Duplicates:0Warnings:第四步,我們更新一下銷售流水表,給新添加的字段“memberid”代代mysql>UPDATEdemo.transASa,demo.membermasterAS->SET->WHEREa.transactionno>ANDa.cardno=b.cardno;--這樣操作可以不用刪除transQueryOK,1rowaffected(0.01Rowsmatched:1Changed:1Warnings:這個更新語句包含了2在實際操作中,你不一定能刪掉demo.trans這個表,因為這個表里面可能已經(jīng)有了很多重要的數(shù)據(jù)。所以,你一定要認真學下我給你介紹的這個更新數(shù)據(jù)的方法,這種復雜demo.membermasterdemo.trans代代12345mysql>DESCRIBE+|+|+|+|++++|Null|Key|Default|+|+|++||+|+|66789|||||||+| |YES| |YES| |YES| |YES| |YES|datetime|YES| | ||||||NULLPRI|+|||||||+|||||auto_increment+8rowsinset(0.02mysql>DESCRIBE+|+||+|+||||||||++++++|Null|Key|Default|Extra||||||++||||||||++++||||||||||||||||||||||||++++||||||||+8rowsinset(0.00 如果的會員卡“ 代代123456789mysql>INSERTINTO->->->->->->,->->->->->->->->->'女->'1970-01-->QueryOK,1rowaffected(0.02代代123456789mysql>SELECT->FROM+|+|||+++++|membername|memberphone|+|||++|||++|||++|||++|memberaddress|+|||+3rowsinset(0.00由于字段“cardno”不再是主鍵,可以允許重復,因此,我們可以在保留會員“”信 代代123456789mysql>SELECT->FROMdemo.transAS->JOINdemo.membermasterAS->JOINdemo.goodsmasterAS->ON(a.memberid=b.idAND++++++|membername|goodsnamety|salesvalue|transdate+|++++++|書|1.000|89.00|2020-12-0100:00:00+++++1rowinset(0.01可以看到,結果是2020年12月01日,買了一本書,消費89元,是正確的MySQLL比如,A店的MySQL數(shù)據(jù)庫中的demo.membermaster中,字段“id”的值是100,這個時候,新增了一個會員,“id”是101。同時,B店的字段“id”值也是100,要加一個新會員,“id”也是101,畢竟,B店的MySQL數(shù)據(jù)庫與A店相互獨立。等A店與B店都把新的會員上傳到總部之后,就會出現(xiàn)兩個“id”是101,但卻是不同會員的情為了解決這個問題,我們想了一個辦法:取消字段“id”d”進行賦值。具體的操作是這樣的:在總部L門店在添加會員的時候,先到總部MySQL數(shù)據(jù)庫中獲取這個最大值,在這個基礎上加1,然后用這個值作為新會員的“id”,同時,更新總部MySQL數(shù)據(jù)庫管理信息表中的當前會這樣一來,各個門店添加會員的時候,都對同一個總部MySQL數(shù)據(jù)庫中的數(shù)據(jù)表字段進行操作,就解決了各門店添加會員時會員編號的問題,同時也避免了使用業(yè)務字段導剛開始使用QL在剛剛的例子中,如果把銷售流水表demo.trans中,所有單位是“包”的商品的價格改成原來價格的80%,該怎么實現(xiàn)呢? 售賣。頁面已增加防盜追蹤,將依 上一 04|增刪改查:如何操作表中的數(shù)據(jù)下一 06|外

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論