Mysql及SQLyog建表說明_第1頁
Mysql及SQLyog建表說明_第2頁
Mysql及SQLyog建表說明_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、mysql數(shù)據(jù)類型與sqlyog中屬性值的含義MySQl數(shù)據(jù)庫的表是一個二維表,由一個或多個數(shù)據(jù)列構(gòu)成。每個數(shù)據(jù)列都有它的特定類型,該類型決定了 MySQl如何看待該列數(shù)據(jù),我們可以把整型數(shù)值存放到字符類型的列中,MySQL那么會把它看成字符串來處理。MySQL中的列類型有三種:數(shù)值類、字符串類和日期/時間類。從大類來看列類型和數(shù)值類型一樣,都是只有三種。但每種列類型都還可細(xì)分。下面對各種列類型進(jìn)行詳細(xì)介紹。數(shù)值類的數(shù)據(jù)列類型數(shù)值型的列類型包括整型和浮點(diǎn)型兩大類。TINYINT: 1字節(jié) 非常小的正整數(shù),帶符號:-128127,不帶符號:0255 SMALLINT 2 字節(jié) 小整數(shù),帶符號:-

2、3276832767 ,不帶符號:065535 MEDIUMINT 3字節(jié) 中等大小的整數(shù),帶符號:-83886088388607,不帶符號:016777215 INT: 4字節(jié) 標(biāo)準(zhǔn)整數(shù),帶符號:-21474836482147483647,不帶符號:04294967295 BIGINT : 81!L字節(jié) 大整數(shù),帶符號:-0807,不帶符號:0615 FLOAT 4字節(jié) 單精度浮點(diǎn)數(shù),最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38 DOUBLE 8 字節(jié) 雙精度浮點(diǎn)數(shù),最小非零值:+-2.72021E-308,最大非零值:+-1.23157E+

3、308 DECIMAL M+2字節(jié)以字符串形式表示的浮點(diǎn)數(shù),它的取值圍可變,由M和D的值決定。整型數(shù)據(jù)列類型MySQ有五種整型數(shù)據(jù)列類型,即TINYINT, SMALLINT MEDIUMINT INT和BIGINT。它們之間的區(qū)別是取值圍不同,存儲空間也各不相同。在整型數(shù)據(jù)列后加上 UNSIGNED!性可以禁止負(fù)數(shù),取值從 0開始。聲明整型數(shù)據(jù)列時,我們可以為它指定個顯示寬度M(1255),如INT(5),指定顯示寬度為 5個字符,如果沒有給它指定顯示寬度,MySQL會為它指定一個默認(rèn)值。顯示寬度只用于顯示,并不能限制取值圍和占用空間,女如: INT(3)會占用4個字節(jié)的存儲空間,并且允許的

4、最大值也不會是999,而是INT整型所允許的最大值。例如如果int的值為10 int (10)顯示結(jié)果為0000000010int (3)顯示結(jié)果為010就是顯示的長度不一樣而已 都是占用四個字節(jié)的空間浮點(diǎn)型數(shù)據(jù)列類型MySQL有三種浮點(diǎn)型數(shù)據(jù)列類型,分別是:FLOAT DOUBLED DECIMAL 浮點(diǎn)類數(shù)據(jù)類型有一個最大可表示值和一個最小非零可表示值,最小非零可表示值決定了該類型的精確度。版之后,F(xiàn)LOAT和DOUBLED可以指定UNSIGNE囑性。當(dāng)指定該屬性時,取值圍不平移到正數(shù)區(qū)間,而只是簡單地把浮點(diǎn)類型的負(fù)數(shù)部份去掉。浮點(diǎn)類型也有 M(1255)和D(130,且不能大于 M-2)

5、。分別表示顯示寬度和小數(shù)位數(shù)。M和D在FLOAT和DOUBLE是可選的,默認(rèn),當(dāng) MySQL版本大于時,F(xiàn)LOAT和DOUBLE類型將被保存為硬件所支持的最大精度。DECIMAL的M和D值在后可選,默認(rèn)D值為0,M值為10。如何選擇數(shù)值類數(shù)據(jù)列類型?為了節(jié)省存儲空間和提高數(shù)據(jù)庫處理效率,我們應(yīng)根據(jù)應(yīng)用數(shù)據(jù)的取值圍來選擇一個最適合的數(shù)據(jù)列類型。如果把一個超出數(shù)據(jù)列取值圍的數(shù)存入該列,那么MySQL就會截短該值,如:我們把99999存入SMALLINT(3)數(shù)據(jù)列里,因為 SMALLINT(3)的取值圍是-3276832767,所以 就會被截短成32767存儲。顯示寬度3不會影響數(shù)值的存儲。 只影

6、響顯示。 對于浮點(diǎn)數(shù)據(jù) 列,存入的數(shù)值會被該列定義的小數(shù)位進(jìn)行四舍五入。如把一個1.234存入FLOAT(6.1)數(shù)據(jù)列中,結(jié)果是1.2。 DECIMAL與 FLOAT和 DOUBLE勺區(qū)別是:DECIMAL類型的值是以字符 串的形式被儲存起來的,它的小數(shù)位數(shù)是固定的。它的優(yōu)點(diǎn)是,不會象FLOAT和DOUBLED型數(shù)據(jù)列那樣進(jìn)行四舍五入而產(chǎn)生誤差,所以很適合用于財務(wù)計算;而它的缺點(diǎn)是:由于它的存儲格式不同,CPU不能對它進(jìn)行直接運(yùn)算,從而影響運(yùn)算效率。DECIMAL(M D)總共要占用M+2個字節(jié)。數(shù)值類數(shù)據(jù)列的屬性ZEROFILL屬性適用于所有數(shù)值類數(shù)據(jù)列類型,作用是,如果數(shù)值的寬度小于定義

7、的顯示寬度,那么在數(shù)值前填充0。UNSIGNED!性不允許數(shù)據(jù)列出現(xiàn)負(fù)數(shù)。AUTO_INCREMEN屬性可生成獨(dú)一無二的數(shù)字序列。只對整數(shù)類的數(shù)據(jù)列有效。NULL和NOT NULL屬性設(shè)置數(shù)據(jù)列是否可為空。DEFAUL矚性可為數(shù)據(jù)列指定XT默認(rèn)值。/字符串類數(shù)據(jù)列類型 字符串可以用來表示任何一種值,所以它是最根本的類型之一。我們可以用字符串類型來存儲圖象或聲音之類的二進(jìn)制數(shù)據(jù),也可存儲用gzip壓縮的數(shù)據(jù)。下表介紹了各種字符串類型:CHAR(M) M字節(jié) M字節(jié) VARCHAR(M) M字節(jié)L+1字節(jié) TINYBLODTINYTEXT 2A8-1 字節(jié) L+1 字節(jié) BLOB TEXT 2A1

8、6-1 字節(jié) L+2 MEDIUMBLQBMEDIUMTE:2A24-1 字節(jié) L+3 LONGBLOBLONGTEXT 2人32-1 字節(jié) L+4 ENUM('value1','value2',.J65535 個成員 1 或 2 字節(jié) SET('value1','value2',.J 64個成員 1,2,3,4 或 8 字節(jié) L+1、L+2是表示數(shù)據(jù)列是可變長度的,它占用的空間會根據(jù)數(shù)據(jù)行的增減面那么改變。數(shù)據(jù)行的總長度取決于存放在這些數(shù)據(jù)列里的數(shù)據(jù)值的長度。L+1或L+2里多出來的字節(jié)是用來保存數(shù)據(jù)值的長度的。在對長度可變的數(shù)

9、據(jù)進(jìn)行處理時,MySQl要把數(shù)據(jù)容和數(shù)據(jù)長度都保存起來。如果把超出字符串最大長度的數(shù)據(jù)放到字符類數(shù)據(jù)列中,MySQL會自動進(jìn)行截短處理。ENUM和 SET類型的數(shù)據(jù)列定義里有一個列表,列表里的兀素就是該數(shù)據(jù)列的合法取值。如果試圖把一個沒有在列表里的值放到數(shù)據(jù)列里,它會被轉(zhuǎn)換為空字符串(“)。字符串類型的值被保存為一組連續(xù)的字節(jié)序列,并會根據(jù)它們?nèi)菁{的是二進(jìn)制字符串還是非二進(jìn)制字符而被區(qū)別對待為字節(jié)或者字符:二進(jìn)制字符串被視為一個連續(xù)的字節(jié)序列,與字符集無關(guān)。MySQL把 BLOB數(shù)據(jù)列和帶 BINARY屬性的CHAR和VARCHA數(shù)據(jù)列里的數(shù)據(jù)當(dāng)作二進(jìn)制值。非二進(jìn)制字符串被視為一個連續(xù)排列的字

10、符序列。與字符集有關(guān)。MySQL把 TEXT列與不帶BINARY屬性的CHAR和 VARCHA數(shù)據(jù)列里的數(shù)據(jù)當(dāng)作二進(jìn)制值對待。 在MySQL4.1以后的版本中,不同的數(shù)據(jù)列可以使用不同的字符集。在MySQL4.1版本以前,MySQL用效勞器的字符集作為默認(rèn)字符集。非二進(jìn)制字符串,即我們通常所說的字符串,是按字符在字符集中先后次序進(jìn)行比擬和排序的。而二進(jìn)制字符串因為與字符集無關(guān),所以不以字符順序排序,而是以字節(jié)的二進(jìn)制值作為比擬和排序的依據(jù)。下面介紹兩種字符串的比擬方式:二進(jìn)制字符串的比擬方式是一個字節(jié)一個字節(jié)進(jìn)行的,比擬的依據(jù)是兩個字節(jié)的二進(jìn)制值。也就是說它是區(qū)分大小寫的,因為同一個字母的大小

11、寫的數(shù)值編碼是不一樣的。非二進(jìn)制字符串的比擬方式是一個字符一個字符進(jìn)行的,比擬的依據(jù)是兩個字符在字符集中的先后順序。在大多數(shù)字符集中,冋一個字母的大小寫往往有著相冋的先后順序,所以它不區(qū)分大小寫。二進(jìn)制字符串與字符集無關(guān),所以無論按字符計算還是按字節(jié)計算,二進(jìn)制字符串的長度都是一樣的。所以VARCHAR(20并不表示它最多能容納 20個字符,而是表示它最多只能容納可以用20個字節(jié)表示出來的字符。對于單字節(jié)字符集,每個字符只占用一個字節(jié),所以這兩者的長度是一樣的,但對于多字節(jié)字符集, 它能容納的字符個數(shù)肯定少于20個。CHAR和VARCHAR CHAF和VARCHA是最常用的兩種字符串類型,它們

12、之間的區(qū)別是:CHAR是固定長度的,每個值占用相冋的字節(jié),不夠的位數(shù)MySQL會在它的右邊用空格字符補(bǔ)足。VARCHA是一種可變長度的類型,每個值占用其剛好的字節(jié)數(shù)再加上一個用來記錄其長度的字節(jié)即L+1字節(jié)。CHAR(O)和VARCHAR(0都是合法的。VARCHAR(O)是從版開始的。它們的作用是作為占位符或用來表示各種on/off開關(guān)值。女口何選擇CHAR和 VARCHA,這里給出兩個原那么:如果數(shù)據(jù)都有相同的長度,選用VARCHAR會多占用空間,因為有一位用來存儲其長度。如果數(shù)據(jù)長短不一,選用VARCHA能節(jié)省存儲 空間。而CHAF不管字符長短都需占用相同的空間,即使是空值也不例外。如果

13、長度出入不大,而且是使用 MylSAM或ISAM類型的表,那么用 CHAR會比 VARCHA好,因為 MylSAM和 ISAM類型的表對處理固定長度的行的效率高。在一個數(shù)據(jù)表里,只要有一個數(shù)據(jù)列的長度是可變的,那么所有數(shù)據(jù)列的長度將是可變的。MySQL會進(jìn)行自動地轉(zhuǎn)換。一個例外,CHAR長度小于4的不會進(jìn)行自動轉(zhuǎn)換,因為MySQL會認(rèn)為這樣做沒必要,節(jié)省不了多少空間。反 而MySQl會把大量長度小的 VARCHA轉(zhuǎn)換成CHAR以減少空間占用量。BLOB和TEXT BLOB是二進(jìn)制字符串,TEXT是非二進(jìn)制字符串。兩者都可存放大容量的信息。有關(guān)BLOB和TEX'TT索引的建立:BDB表類

14、型和 以上版本的 MylSAM表類型允許在 BLOB和TEX'數(shù)據(jù)列上建立索引。ISAM、HEAP和InnoDB表不支持大對象列的索引。使用BLOB和 TEX'T應(yīng)注意的問題:由于這兩個列類型所存儲的數(shù)據(jù)量大,所以刪除和修改操作容易在數(shù)據(jù)表里產(chǎn)生大量的碎片,需定期運(yùn)行OPTIMIZE TABLE以減少碎片和提高性能。如果使用的值非常巨大,就需對效勞器進(jìn)行相應(yīng)的優(yōu)化調(diào)整,增加max_allowed_packet參數(shù)的值。對那MM些可會用到變些巨大數(shù)據(jù)的客戶程序,也需加大它們的數(shù)據(jù)包大小。ENUM和SET ENU和SET都是比擬特殊的字符串?dāng)?shù)據(jù)列類型,它們的取值圍是一個預(yù)先定義好的

15、列表。ENU或SET數(shù)據(jù)列的取值只能從這個列表中進(jìn)行選擇。ENUM和 SET的主要區(qū)別是:ENUM只能取單值,它的數(shù)據(jù)列表是一個枚舉集合。它的合法取值列表最多允許有 65535個成員。例如:ENUM("N","Y")表示,該數(shù)據(jù)列的取值要么是 "Y",要么就是"N"。SET可取多值。它的合法取值列表最多允許有 64個成員??兆址彩且粋€合法的SET值。ENUM和 SET的值是以字符串形式出現(xiàn)的,但在部,MySQL以數(shù)值的形式存儲它們。ENUM勺合法取值列表中的字符串被按聲明定義的順序被編號,從1開始。SET的編號

16、不是按順序進(jìn)行編號的,SE'T中每一個合法取值都對應(yīng)著 SET值里的一個位。第一個合法取值對應(yīng) 0位,第二個合法取值對應(yīng)1位,以此類推,如果數(shù)值形式的SET值等于0,那么說明它是一個空字符串,如果某個合法的取值出現(xiàn)在 SET數(shù)據(jù)列里,與之對應(yīng)的位就會被置位;如果某個合法的取值沒有出現(xiàn)在SET數(shù)據(jù)列里,與之對應(yīng)的位就會被清零。正因為SET值與位有這樣的對應(yīng)關(guān)系,所以SET數(shù)據(jù)列的多個合法取值才能冋時出現(xiàn)并構(gòu)成SET值。字符串類型數(shù)據(jù)列的字符集屬性 在MySQL 4.1以前的版本,字符串?dāng)?shù)據(jù)列的字符集由效勞器的字符決定,MySQL 4.1版以后的版本可對每個字符串?dāng)?shù)據(jù)列指定不冋的字符串。如

17、果按默認(rèn)方式設(shè)置,可按數(shù)據(jù)列、數(shù)據(jù)表、數(shù)據(jù)庫、效勞器的順序關(guān)聯(lián)字符串的字符集,直到找一個明確定義的字符集。/日期,時間型數(shù)據(jù)列類型 DATE 1000-01-019999-12-313 字節(jié)(MySQL3.23 版以前是 4 字節(jié) )0000-00-00 TIME -838:59:59838:59:593 字節(jié) 00:00:00 DATETIME 1000-01-0100:00:009999-12-31 23:59:59 8字節(jié) 0000-00-00 00:00:00TIMESTAMP 0002037年的!LIEIE某個時刻 4 字節(jié) 000 YEARYEAR(4): 19012155 YEA

18、R(2): 19702069 1 字節(jié) 0000 MySC總是把日期和日期里的年份放在最前面,按年月日的順序顯示。DATE TIME、DATATIM數(shù)據(jù)列類型DATE TIME和DATATIME類型分別存放日期值、時間值、日期和時間值的組合。它們的格式分別是“ CCYY-MM-DD、 “hh:mm:ss、 “CCYYMMDDhh:mm:ss。DATATIM里的時間值和 TIME值是有區(qū)別的,DATATIME1的時間值代表的是幾點(diǎn)幾分,TIME值代表的是所花費(fèi)的時間。當(dāng)向TIME數(shù)據(jù)列插值時,需用時間的完整寫法,如12分30秒要寫成“00:12:30 。TIMESTAMPS據(jù)列類型TIMESTAMPS據(jù)列的格式是 CCYYMMDDhhmms取值圍從000開始,即1970年1月1號,最大到2037年。它的特點(diǎn)是能把

溫馨提示

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

評論

0/150

提交評論