列類型(字段類型)整數(shù)類型Tinyint迷你整形,,系統(tǒng)采用一個(gè)字節(jié)來保存的整形:一個(gè)字節(jié) = 8位,,最大能表示的數(shù)值是0-255 Smallint小整形,系統(tǒng)采用兩個(gè)字節(jié)來保存的整形:能表示0-65535之間 Mediumint中整形,,采用三個(gè)字節(jié)來保存數(shù)據(jù),。 Int整形(標(biāo)準(zhǔn)整形),采用四個(gè)字節(jié)來保存數(shù)據(jù),。 Bigint大整形,,采用八個(gè)字節(jié)來保存數(shù)據(jù)。
1,、 創(chuàng)建數(shù)據(jù)表
2,、 插入合理數(shù)據(jù)
3、 插入錯(cuò)誤數(shù)據(jù)(超出對應(yīng)的數(shù)據(jù)范圍)
4,、 錯(cuò)誤原因:并不是說tinyint沒有這么大的空間,,而是因?yàn)?/span>mysql默認(rèn)的為整形增加負(fù)數(shù)。 實(shí)際表示的區(qū)間為-128,127
實(shí)際應(yīng)用中,,應(yīng)該根據(jù)對應(yīng)的數(shù)據(jù)的范圍來選定對應(yīng)的整形類型:通常使用的比較多的TINYINT和int,。
無符號標(biāo)識設(shè)定
無符號:表示存儲的數(shù)據(jù)在當(dāng)前字段中,沒有負(fù)數(shù)(只有正數(shù),,區(qū)間為0-255) 基本語法:在類型之后加上一個(gè) unsigned
顯示長度顯示長度:指數(shù)據(jù)(整型)在數(shù)據(jù)顯示的時(shí)候,,到底可以顯示多長位。
Tinyint(3): 表示最長可以顯示3位,unsigned說明只能是正數(shù),,0-255永遠(yuǎn)不會超過三個(gè)長度 Tinyint(4):表示最長可以顯示4位,-128~127
顯示長度只是代表了數(shù)據(jù)是否可以達(dá)到指定的長度,,但是不會自動滿足到指定長度:如果想要數(shù)據(jù)顯示的時(shí)候,,保持最高位(顯示長度),那么還需要給字段增加一個(gè)zerofill屬性才可以,。
Zerofill:從左側(cè)開始填充0(左側(cè)不會改變數(shù)值大?。载?fù)數(shù)的時(shí)候就不能使用zerofill,,一旦使用zerofill就相當(dāng)于確定該字段為unsigned
數(shù)據(jù)顯示的時(shí)候,,zerofill會在左側(cè)填充0到指定位:如果不足3位,那么填充到3位,,如果本身已經(jīng)夠了或者超出,,那么就不在填充。
顯示長度可以自己設(shè)定:超出長度(但是不超出范圍)不會影響,,只會對不夠長度的進(jìn)行補(bǔ)充(顯示長度)
小數(shù)類型專門用來存儲小數(shù)的
在Mysql中將小數(shù)類型又分為兩類:浮點(diǎn)型和定點(diǎn)型
浮點(diǎn)型浮點(diǎn)型又稱之為精度類型:是一種有可能丟失精度的數(shù)據(jù)類型,,數(shù)據(jù)有可能不那么準(zhǔn)確(由其是在超出范圍的時(shí)候)
浮點(diǎn)型之所以能夠存儲較大的數(shù)值(不精確),原因就是利用存儲數(shù)據(jù)的位來存儲指數(shù)
整型:所有位都為1
計(jì)算結(jié)果:
浮點(diǎn)型:有部分用于存儲數(shù)據(jù),,有部分用于存指數(shù)
前三位轉(zhuǎn)換成十進(jìn)制之后用作10的指數(shù): 10^7 * 數(shù)據(jù)值 FloatFloat又稱之為單精度類型:系統(tǒng)提供4個(gè)字節(jié)用來存儲數(shù)據(jù),,但是能表示的數(shù)據(jù)范圍比整型大的多,大概是10^38,;只能保證大概7個(gè)左右的精度(如果數(shù)據(jù)在7位數(shù)以內(nèi),,那么基本是準(zhǔn)確的,但是如果超過7位數(shù),,那么就是不準(zhǔn)確的)
基本語法 Float:表示不指定小數(shù)位的浮點(diǎn)數(shù) Float(M,D):表示一共存儲M個(gè)有效數(shù)字,,其中小數(shù)部分占D位 Float(10,2):整數(shù)部分為8位,小數(shù)部分為2位
1,、 創(chuàng)建一個(gè)數(shù)據(jù)表保存浮點(diǎn)數(shù)據(jù)
2,、 存入數(shù)據(jù):合法數(shù)據(jù)
注意:如果數(shù)據(jù)精度丟失,那么浮點(diǎn)型是按照四舍五入的方式進(jìn)行計(jì)算 3,、 插入數(shù)據(jù),,超出大小
4、 數(shù)據(jù)長度剛好滿足條件,,但是會超出精度
說明:用戶不能插入數(shù)據(jù)直接超過指定的整數(shù)部分長度,,但是如果是系統(tǒng)自動進(jìn)位導(dǎo)致,系統(tǒng)可以承擔(dān),。 5,、浮點(diǎn)數(shù)可以采用科學(xué)計(jì)數(shù)法來存儲數(shù)據(jù)
浮點(diǎn)數(shù)的應(yīng)用:通常是用來保存一些數(shù)量特別大,大到可以不用那么精確的數(shù)據(jù)。
DoubleDouble又稱之為雙精度:系統(tǒng)用8個(gè)字節(jié)來存儲數(shù)據(jù),,表示的范圍更大,,10^308次方,但是精度也只有15位左右,。
定點(diǎn)數(shù)定點(diǎn)數(shù):能夠保證數(shù)據(jù)精確的小數(shù)(小數(shù)部分可能不精確,,超出長度會四舍五入),整數(shù)部分一定精確 DecimalDecimal定點(diǎn)數(shù):系統(tǒng)自動根據(jù)存儲的數(shù)據(jù)來分配存儲空間,,每大概9個(gè)數(shù)就會分配四個(gè)字節(jié)來進(jìn)行存儲,,同時(shí)小數(shù)和整數(shù)部分是分開的。
Decimal(M,D):M表示總長度,,最大值不能超過65,,D代表小數(shù)部分長度,最長不能超過30,。
1,、 創(chuàng)建表:與浮點(diǎn)數(shù)對比
2、 插入正常數(shù)據(jù)
3,、 插入最大數(shù)據(jù)
4,、 嘗試定點(diǎn)數(shù)進(jìn)行四舍五入
定點(diǎn)數(shù)的應(yīng)用:如果涉及到錢的時(shí)候有可能使用定點(diǎn)數(shù) 時(shí)間日期類型Date日期類型:系統(tǒng)使用三個(gè)字節(jié)來存儲數(shù)據(jù),對應(yīng)的格式為:YYYY-mm-dd,,能表示的范圍是從1000-01-01 到9999-12-12,,初始值為0000-00-00 Time時(shí)間類型:能夠表示某個(gè)指定的時(shí)間,但是系統(tǒng)同樣是提供3個(gè)字節(jié)來存儲,,對應(yīng)的格式為:HH:ii:ss,,但是mysql中的time類型能夠表示時(shí)間范圍要大的多,能表示從-838:59:59~838:59:59,,在mysql中具體的用處是用來描述時(shí)間段,。 Datetime日期時(shí)間類型:就是將前面的date和time合并起來,表示的時(shí)間,,使用8個(gè)字節(jié)存儲數(shù)據(jù),,格式為YYYY-mm-dd HH:ii:ss,能表示的區(qū)間1000-01-01 00:00:00 到9999-12-12 23:59:59,,其可以為0值:0000-00-00 00:00:00 Timestamp時(shí)間戳類型:mysql中的時(shí)間戳只是表示從格林威治時(shí)間開始,,但是其格式依然是:YYYY-mm-dd HH:ii:ss Year年類型:占用一個(gè)字節(jié)來保存,能表示1900~2155年,,但是year有兩種數(shù)據(jù)插入方式:0~99和四位數(shù)的具體年
1,、 創(chuàng)建對應(yīng)的時(shí)間日期類型的數(shù)據(jù)表
2、 插入數(shù)據(jù):正常數(shù)據(jù)
3,、 year的特殊性:可以采用兩位數(shù)的數(shù)據(jù)插入,,也可以采用四位數(shù)的年份插入
4,、 year進(jìn)行兩位數(shù)插入的時(shí)候,有一個(gè)區(qū)間劃分,,零界點(diǎn)為69和70:當(dāng)輸入69以下,,那么系統(tǒng)時(shí)間為20+數(shù)字,如果是70以上,,那配系統(tǒng)時(shí)間為19+數(shù)字
5,、 timestamp當(dāng)對應(yīng)的數(shù)據(jù)被修改的時(shí)候,會自動更新(這個(gè)被修改的數(shù)據(jù)不是自己)
6,、 time類型特殊性:本質(zhì)是用來表示時(shí)間區(qū)間(當(dāng)前時(shí)間之后的多少個(gè)小時(shí)),能表示的范圍比較大
7,、 在進(jìn)行時(shí)間類型錄入的時(shí)候(time)還可以使用一個(gè)簡單的日期代替時(shí)間,,在時(shí)間格式之前加一個(gè)空格,然后指定一個(gè)數(shù)字(可以是負(fù)數(shù)):系統(tǒng)會自動將該數(shù)字轉(zhuǎn)換成天數(shù) * 24小時(shí),,再加上后面的時(shí)間,。
PHP中有著非常強(qiáng)大的時(shí)間日期轉(zhuǎn)換函數(shù):date將時(shí)間戳轉(zhuǎn)換成想要的格式,strtotime又可以將很多格式轉(zhuǎn)換成對應(yīng)的時(shí)間戳,。PHP通常不需要數(shù)據(jù)庫來幫助處理這么復(fù)雜的時(shí)間日期,,所以通常配合PHP的時(shí)候,時(shí)間的保存通常使用時(shí)間戳(真正),,從而用整型來保存,。字符串型 Mysql記錄長度
在mysql中,有一項(xiàng)規(guī)定:mysql的記錄長度(record == 行row)總長度不能超過65535個(gè)字節(jié),。
Varchar能夠存儲的理論值為65535個(gè)字符:字符在不同的字符集下可能占用多個(gè)字節(jié),。
1、 創(chuàng)建表:證明varchar在mysql中能夠達(dá)到的理論值(utf8和GBK) Varchar除了存儲的數(shù)據(jù)本身要占用空間:還需要額外的空間來保存記錄長度
2,、 計(jì)算在utf8和GBK下對應(yīng)的varchar能夠存儲的長度 Utf8 最多只能存儲21844個(gè)字符 GBK最多只能存儲32766個(gè)字符
字符串型
Char定長字符:指定長度之后,,系統(tǒng)一定會分配指定的空間用于存儲數(shù)據(jù) 基本語法:char(L),L代表字符數(shù)(中文與英文字母一樣),,L長度為0到255 Varchar變長字符:指定長度之后,,系統(tǒng)會根據(jù)實(shí)際存儲的數(shù)據(jù)來計(jì)算長度,分配合適的長度(數(shù)據(jù)沒有超出長度) 基本語法:Varchar(L),,L代表字符數(shù),,L的長度理論值位0到65535
因?yàn)?/span>varchar要記錄數(shù)據(jù)長度(系統(tǒng)根據(jù)數(shù)據(jù)長度自動分配空間),所以每個(gè)varchar數(shù)據(jù)產(chǎn)生后,,系統(tǒng)都會在數(shù)據(jù)后面增加1-2個(gè)字節(jié)的額外開銷:是用來保存數(shù)據(jù)所占用的空間長度 如果數(shù)據(jù)本身小于127個(gè)字符:額外開銷一個(gè)字節(jié),;如果大于127個(gè),就開銷兩個(gè)字節(jié)
Char和varchar數(shù)據(jù)存儲對比(utf8,,一個(gè)字符都會占用3個(gè)字節(jié))
Char和varchar的區(qū)別 1,、 char一定會使用指定的空間,varchar是根據(jù)數(shù)據(jù)來定空間 2、 char的數(shù)據(jù)查詢效率比varchar高:varchar是需要通過后面的記錄數(shù)來計(jì)算
如果確定數(shù)據(jù)一定是占指定長度,,那么使用char類型,; 如果不確定數(shù)據(jù)到底有多少,那么使用varchar類型,; 如果數(shù)據(jù)長度超過255個(gè)字符,,不論是否固定長度,都會使用text,,不再使用char和varchar
Text文本類型:本質(zhì)上mysql提供了兩種文本類型 Text:存儲普通的字符文本 Blob:存儲二進(jìn)制文本(圖片,,文件),一般都不會使用blob來存儲文件本身,,通常是使用一個(gè)鏈接來指向?qū)?yīng)的文件本身,。
Text:系統(tǒng)中提供的四種text Tinytext:系統(tǒng)使用一個(gè)字節(jié)來保存,實(shí)際能夠存儲的數(shù)據(jù)為:2 ^ 8 + 1 Text:使用兩個(gè)字節(jié)保存,,實(shí)際存儲為:2 ^ 16 + 2 Mediumtext:使用三個(gè)字節(jié)保存,,實(shí)際存儲為:2 ^ 24 + 3 Longtext:使用四個(gè)字節(jié)保存,實(shí)際存儲為:2 ^ 32 + 4
注意: 1,、 在選擇對應(yīng)的存儲文本的時(shí)候,,不用刻意去選擇text類型,系統(tǒng)會自動根據(jù)存儲的數(shù)據(jù)長度來選擇合適的文本類型,。 2,、 在選擇字符存儲的時(shí)候,如果數(shù)據(jù)超過255個(gè)字符,,那么一定選擇text存儲
Enum枚舉類型:在數(shù)據(jù)插入之前,,先設(shè)定幾個(gè)項(xiàng),這幾個(gè)項(xiàng)就是可能最終出現(xiàn)的數(shù)據(jù)結(jié)果,。
如果確定某個(gè)字段的數(shù)據(jù)只有那么幾個(gè)值:如性別,,男、女,、保密,,系統(tǒng)就可以在設(shè)定字段的時(shí)候規(guī)定當(dāng)前字段只能存放固定的幾個(gè)值:使用枚舉
基本語法:enum(數(shù)據(jù)值1,數(shù)據(jù)值2…) 系統(tǒng)提供了1到2個(gè)字節(jié)來存儲枚舉數(shù)據(jù):通過計(jì)算enum列舉的具體值來選擇實(shí)際的存儲空間:如果數(shù)據(jù)值列表在255個(gè)以內(nèi),那么一個(gè)字節(jié)就夠,,如果超過255但是小于65535,,那么系統(tǒng)采用兩個(gè)字節(jié)保存。
1,、 創(chuàng)建表
2,、 插入數(shù)據(jù):合法數(shù)據(jù),字段對應(yīng)的值必須是設(shè)定表的時(shí)候所確定的值
3,、 錯(cuò)誤數(shù)據(jù):enum有規(guī)范數(shù)據(jù)的功能,,能夠保證插入的數(shù)據(jù)必須是設(shè)定的范圍,,其他類型都不可以
4、 枚舉enum的存儲原理:實(shí)際上字段上所存儲的值并不是真正的字符串,,而是字符串對應(yīng)的下標(biāo):當(dāng)系統(tǒng)設(shè)定枚舉類型的時(shí)候,,會給枚舉中每個(gè)元素定義一個(gè)下標(biāo),這個(gè)下標(biāo)規(guī)則從1開始 Enum(1=>‘男’,2=>’女’,3=>’保密’)
特性:在mysql中系統(tǒng)是自動進(jìn)行類型轉(zhuǎn)換的:如果數(shù)據(jù)碰到“+,、-,、*、/”系統(tǒng)就會自動將數(shù)據(jù)轉(zhuǎn)換成數(shù)值:而普通字符串轉(zhuǎn)換成數(shù)值為0 Select 字段名 + 0 from 表名;
5,、 既然實(shí)際enum字段存儲的結(jié)果是數(shù)值:那么在進(jìn)行數(shù)據(jù)插入的時(shí)候,,就可以使用對應(yīng)的數(shù)值來進(jìn)行。
枚舉的意義: 1,、 規(guī)范數(shù)據(jù)本身,,限定只能插入規(guī)定的數(shù)據(jù)項(xiàng) 2、 節(jié)省存儲空間 Set集合:是一種將多個(gè)數(shù)據(jù)選項(xiàng)可以同時(shí)保存的數(shù)據(jù)類型,,本質(zhì)是將指定的項(xiàng)按照對應(yīng)的二進(jìn)制位來進(jìn)行控制:1表示該選項(xiàng)被選中,0表示該選項(xiàng)沒有被選中,。
基本語法:set(‘值1’,’值2’,’值3’…) 系統(tǒng)為set提供了多個(gè)字節(jié)進(jìn)行保存,,但是系統(tǒng)會自動計(jì)算來選擇具體的存儲單元 1個(gè)字節(jié):set只能有8個(gè)選項(xiàng) 2個(gè)字節(jié):set只能有16個(gè)選項(xiàng) 3個(gè)字節(jié):set只能表示24個(gè)選項(xiàng) 8個(gè)字節(jié):set可以表示64個(gè)選項(xiàng)
Set和enum一樣,最終存儲到數(shù)據(jù)字段中的依然是數(shù)字而不是真實(shí)的字符串
1,、 創(chuàng)建表
2,、 插入數(shù)據(jù):可以插入多個(gè)數(shù)據(jù),就是在數(shù)據(jù)插入的字符串中,,使用對應(yīng)的逗號“,”將選項(xiàng)進(jìn)行隔開
3,、 數(shù)據(jù)選項(xiàng)所在的數(shù)據(jù)與數(shù)據(jù)插入的順序無關(guān):最終都會變成選項(xiàng)對應(yīng)的順序
4、 分析數(shù)據(jù)存儲的方式 4.1 系統(tǒng)將對應(yīng)的數(shù)據(jù)選項(xiàng)(設(shè)計(jì))按照順序進(jìn)行編排:從第一個(gè)開始進(jìn)行占位,,每一個(gè)都對應(yīng)一個(gè)二進(jìn)制位,。
4.2 數(shù)據(jù)在存儲的時(shí)候,如果被選中,,那么對應(yīng)的位的值就為1,,否則為0
4.3 系統(tǒng)在進(jìn)行存儲的時(shí)候會自動將得到的最終的二進(jìn)制顛倒過來,然后再進(jìn)行轉(zhuǎn)換成十進(jìn)制存儲
5,、 查看數(shù)據(jù):按照自動轉(zhuǎn)換成數(shù)值來查看
6,、 既然是數(shù)值,那么就可以插入數(shù)值來代替實(shí)際插入數(shù)據(jù)
注意:數(shù)字插入的前提是對應(yīng)的二進(jìn)制位上都有對應(yīng)的數(shù)據(jù)項(xiàng)
Set集合的意義: 1,、 規(guī)范數(shù)據(jù) 2,、 節(jié)省存儲空間
Enum:單選框 Set:復(fù)選框 列屬性
列屬性又稱之為字段屬性,在mysql中一共有6個(gè)屬性:null,,默認(rèn)值,,列描述,,主鍵,唯一鍵和自動增長 Null屬性NULL屬性:代表字段為空
如果對應(yīng)的值為YES表示該字段可以為NULL
注意: 1,、 在設(shè)計(jì)表的時(shí)候,,盡量不要讓數(shù)據(jù)為空 2,、 Mysql的記錄長度為65535個(gè)字節(jié),,如果一個(gè)表中有字段允許為NULL,,那么系統(tǒng)就會設(shè)計(jì)保留一個(gè)字節(jié)來存儲NULL,最終有效存儲長度為65534個(gè)字節(jié),。
默認(rèn)值Default:默認(rèn)值,,當(dāng)字段被設(shè)計(jì)的時(shí)候,如果允許默認(rèn)條件下,,用戶不進(jìn)行數(shù)據(jù)的插入,,那么就可以使用事先準(zhǔn)備好的數(shù)據(jù)來填充:通常填充的是NULL
測試:不給當(dāng)前字段提供數(shù)據(jù)值
Default關(guān)鍵字的另外一層使用:顯示的告知字段使用默認(rèn)值:在進(jìn)行數(shù)據(jù)插入的時(shí)候,對字段值直接使用default
列描述列描述:comment,,是專門用于給開發(fā)人員進(jìn)行維護(hù)的一個(gè)注釋說明
基本語法:comment ‘字段描述’;
查看Comment:必須通過查看表創(chuàng)建語句
主鍵顧名思義:主要的鍵,,primary key,在一張表中,,有且只有一個(gè)字段,,里面的值具有唯一性 創(chuàng)建主鍵隨表創(chuàng)建系統(tǒng)提供了兩種增加主鍵的方式 1、 方案1:直接在需要當(dāng)做主鍵的字段之后,,增加primary key屬性來確定主鍵 2,、 方案2:在所有字段之后增加primary key選項(xiàng):primary key(字段信息)
表后增加基本語法:alter table 表名 add primary key(字段);
查看主鍵方案1:查看表結(jié)構(gòu)
方案2:查看表的創(chuàng)建語句
刪除主鍵基本語法:alter table 表名 drop primary key;
復(fù)合主鍵
案例:有一張學(xué)生選修課表:一個(gè)學(xué)生可以選修多個(gè)選修課,一個(gè)選修課也可以由多個(gè)學(xué)生來選:但是一個(gè)學(xué)生在一個(gè)選修課中只有一個(gè)成績,。
主鍵約束主鍵一旦增加,,那么對對應(yīng)的字段有數(shù)據(jù)要求
1、 當(dāng)前字段對應(yīng)的數(shù)據(jù)不能為空,; 2,、 當(dāng)前字段對應(yīng)的數(shù)據(jù)不能有任何重復(fù)
主鍵分類主鍵分類采用的是主鍵所對應(yīng)的字段的業(yè)務(wù)意義分類
業(yè)務(wù)主鍵:主鍵所在的字段,具有業(yè)務(wù)意義(學(xué)生ID,,課程ID) 邏輯主鍵:自然增長的整型(應(yīng)用廣泛) 自動增長自動增長:auto_increment,,當(dāng)給定某個(gè)字段該屬性之后,該列的數(shù)據(jù)在沒有提供確定數(shù)據(jù)的時(shí)候,,系統(tǒng)會根據(jù)之前已經(jīng)存在的數(shù)據(jù)進(jìn)行自動增加后,,填充數(shù)據(jù)。
通常自動增長用于邏輯主鍵,。 原理自動增長的原理:
1,、 在系統(tǒng)中有維護(hù)一組數(shù)據(jù),用來保存當(dāng)前使用了自動增長屬性的字段,,記住當(dāng)前對應(yīng)的數(shù)據(jù)值,,再給定一個(gè)指定的步長 2、 當(dāng)用戶進(jìn)行數(shù)據(jù)插入的時(shí)候,,如果沒有給定值,,系統(tǒng)在原始值上再加上步長變成新的數(shù)據(jù) 3、 自動增長的觸發(fā):給定屬性的字段沒有提供值 4、 自動增長只適用于數(shù)值
使用自動增長基本語法:在字段之后增加一個(gè)屬性auto_increment
插入數(shù)據(jù):觸發(fā)自動增長,,不能給定具體值
修改自動增長1,、 查看自增長:自增長一旦觸發(fā)使用之后,會自動的在表選項(xiàng)中增加一個(gè)選項(xiàng)(一張表最多只能擁有一個(gè)自增長)
2,、 表選項(xiàng)可以通過修改表結(jié)構(gòu)來實(shí)現(xiàn) Alter table 表名 auto_increment = 值;
刪除自動增長刪除自增長:就是在字段屬性之后不再保留auto_increment,,當(dāng)用戶修改自增長所在字段時(shí),如果沒有看到auto_increment屬性,,系統(tǒng)會自動清除該自增長
初始設(shè)置在系統(tǒng)中,,有一組變量用來維護(hù)自增長的初始值和步長 Show variables like ‘a(chǎn)uto_increment%’;
細(xì)節(jié)問題
1、 一張表只有一個(gè)自增長:自增長會上升到表選項(xiàng)中 2,、 如果數(shù)據(jù)插入中沒有觸發(fā)自增長(給定了數(shù)據(jù)),,那么自增長不會表現(xiàn)
3、 自增長修改的時(shí)候,,值可以較大,,但是不能比當(dāng)前已有的自增長字段的值小
唯一鍵
唯一鍵:unique key,用來保證對應(yīng)的字段中的數(shù)據(jù)唯一的,。
主鍵也可以用來保證字段數(shù)據(jù)唯一性,,但是一張表只有一個(gè)主鍵。 1,、 唯一鍵在一張表中可以有多個(gè),。 2、 唯一鍵允許字段數(shù)據(jù)為NULL,,NULL可以有多個(gè)(NULL不參與比較) 創(chuàng)建唯一鍵創(chuàng)建唯一鍵與創(chuàng)建主鍵非常類似
1,、 直接在表字段之后增加唯一鍵標(biāo)識符:unique[ key]
2、 在所有的字段之后使用unique key(字段列表);
3,、 在創(chuàng)建完表之后也可以增加唯一鍵
查看唯一鍵唯一鍵是屬性,,可以通過查看表結(jié)構(gòu)來實(shí)現(xiàn)
唯一鍵效果:在不為空的情況下,不允許重復(fù)
在查看表創(chuàng)建語句的時(shí)候,,會看到與主鍵不同的一點(diǎn):多出一個(gè)“名字”
刪除唯一鍵一個(gè)表中允許存在多個(gè)唯一鍵:假設(shè)命令為主鍵一樣:alter table 表名 drop unique key;//錯(cuò)誤的
Index關(guān)鍵字:索引,,唯一鍵是索引一種(提升查詢效率)
刪除的基本語法:alter table 表名 drop index 唯一鍵名字;
修改唯一鍵:先刪除后增加
復(fù)合唯一鍵唯一鍵與主鍵一樣可以使用多個(gè)字段來共同保證唯一性;
一般主鍵都是單一字段(邏輯主鍵),,而其他需要唯一性的內(nèi)容都是由唯一鍵來處理,。 表關(guān)系
表關(guān)系:表與表之間(實(shí)體)有什么樣的關(guān)系,每種關(guān)系應(yīng)該如何設(shè)計(jì)表結(jié)構(gòu),。 一對一一對一:一張表中的一條記錄與另外一張表中最多有一條明確的關(guān)系:通常,,此設(shè)計(jì)方案保證兩張表中使用同樣的主鍵即可
學(xué)生表
表的使用過程中:常用的信息會經(jīng)常去查詢,,而不常用的信息會偶爾才會用到,。
解決方案:將兩張表拆分,常見的放一張表,不常見的放一張表
常用表
不常用表
一對多一對多,,通常也叫作多對一的關(guān)系,。通常一對多的關(guān)系設(shè)計(jì)的方案,在“多”關(guān)系的表中去維護(hù)一個(gè)字段,,這個(gè)字段是“一”關(guān)系的主鍵,。
母親表
孩子表
多對多
多對多:一張表中的一條記錄在另外一張表中可以匹配到多條記錄,反過來也一樣,。
多對多的關(guān)系如果按照多對一的關(guān)系維護(hù):就會出現(xiàn)一個(gè)字段中有多個(gè)其他表的主鍵,,在訪問的時(shí)候就會帶來不便。
既然通過兩張表自己增加字段解決不了問題,,那么就通過第三張表來解決,。
師生關(guān)系 1、 一個(gè)老師教過多個(gè)班級的學(xué)生,; 2,、 一個(gè)學(xué)生聽過多個(gè)老師講的課;
首先得有兩個(gè)實(shí)體:老師表和學(xué)生表
從中間設(shè)計(jì)一張表:維護(hù)兩張表對應(yīng)的聯(lián)系:每一種聯(lián)系都包含
多對多解決方案,;增加一個(gè)中間表,,讓中間表與對應(yīng)的其他表形成兩個(gè)多對一的關(guān)系:多對一的解決方案是在“多”表中增加“一”表對應(yīng)的主鍵字段。
|
|