數(shù)據(jù)表(Table)
數(shù)據(jù)表是數(shù)據(jù)庫(kù)的基本組成元素渺贤,以記錄(行)和字段(列)組成的二位結(jié)構(gòu)用于儲(chǔ)存數(shù)據(jù)九秀。數(shù)據(jù)庫(kù)由表結(jié)構(gòu)和表內(nèi)容組成,先建立表結(jié)構(gòu)掂林,然后才能輸入數(shù)據(jù)臣缀。數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)主要包括字段名稱(chēng),字段類(lèi)型和字段屬性的設(shè)置泻帮。在關(guān)系數(shù)據(jù)庫(kù)中精置,為了確保數(shù)據(jù)的一致性和完整性,在創(chuàng)建表時(shí)除了必須指定字段名稱(chēng)锣杂、字段類(lèi)型和字段屬性外脂倦,還需要使用約束(constraint)、索引(index)元莫、主鍵(primary key)和外鍵(foreign key)等功能屬性赖阻。
數(shù)據(jù)值和列類(lèi)型
對(duì)MuSQL中數(shù)據(jù)值的分類(lèi),有數(shù)值型踱蠢、字符型火欧、日期型和控制等,這和一般的編程語(yǔ)言的分類(lèi)差不多。另外苇侵,MySQL數(shù)據(jù)庫(kù)的表是一個(gè)二維表赶盔,由一個(gè)或多個(gè)數(shù)據(jù)列構(gòu)成。每個(gè)數(shù)據(jù)列都有它的特定類(lèi)型榆浓,該類(lèi)型決定了MySQL如何看待該列數(shù)據(jù)于未,我們可以把整形數(shù)值存放在字符型的列中,MySQL則會(huì)把它當(dāng)成字符串處理哀军。MySQL中的列類(lèi)型有三種:數(shù)值型沉眶、字符串類(lèi)和日期/時(shí)間類(lèi)。從大類(lèi)來(lái)看列類(lèi)型和數(shù)值類(lèi)型一樣杉适,都是只有三種谎倔,但每一種列類(lèi)型都還可細(xì)分。下面對(duì)各種列類(lèi)型進(jìn)行詳細(xì)介紹猿推。
數(shù)值類(lèi)的數(shù)據(jù)列類(lèi)型
| 數(shù)據(jù)列類(lèi)型 | 存儲(chǔ)空間 | 說(shuō)明 | 取值范圍 |
|: ----------------- |:-------------|: --------------------|----------------------|
| TINTINT | 1字節(jié) | 非常小的整數(shù) | 帶符號(hào)值: -128 ~ 127
無(wú)符號(hào)值:0 ~ 256|
|SMALLINT | 2字節(jié) | 較小的整數(shù) |帶符號(hào)值:-32 768 ~ 32768
無(wú)符號(hào)值:0 ~ 65535 |
| MEDIUMINT| 3字節(jié) | 中等大小的整數(shù) | 帶符號(hào)值:-8 388 608 ~ 8 388 607
無(wú)符號(hào)值:0 ~ 16 777 215|
| INT| 4字節(jié) | 標(biāo)準(zhǔn)整數(shù) | 帶符號(hào)值:-2 147 483 648 ~ 2 147 483 647
無(wú)符號(hào)值:0 ~ 4 294 967 295|
| BIGINT| 8字節(jié) | 大整數(shù) | 帶符號(hào)值:-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
無(wú)符號(hào)值:0 ~ 18 446 744 073 709 551 615|
| FLOAT| 4 或 8字節(jié) | 單精度浮點(diǎn)數(shù) | 最小非零值:±1.175494351E-38
最大非零值:±3.402823466E+38|
| DOUBLE| 8字節(jié) | 雙精度浮點(diǎn)數(shù) | 最小非零值:±2.2250738585072014E-308
最大非零值:±1.7976931348623157E+308|
| DECIMAL| 自定義 | 以字符串形式表示的浮點(diǎn)數(shù) | 取決于儲(chǔ)存單元字節(jié)數(shù)|
為了節(jié)省存儲(chǔ)空間和提高數(shù)據(jù)庫(kù)處理效率片习,我們應(yīng)根據(jù)應(yīng)用數(shù)據(jù)的取值范圍來(lái)選擇一個(gè)最合適的數(shù)據(jù)列類(lèi)型。如果把一個(gè)超出數(shù)據(jù)列取值范圍的數(shù)存入該列蹬叭,則MySQL就會(huì)截?cái)嘣撝蹬河剑纾何覀儼?9999存入 SMALLINT(3)數(shù)據(jù)列里,因?yàn)镾AMLLINT(3)的取值范圍是-32 768 ~ 32768秽五,所以就會(huì)截?cái)喑?2767存儲(chǔ)孽查。顯示寬度3 不會(huì)影響數(shù)值的存儲(chǔ),只影響顯示坦喘。
字符串類(lèi)數(shù)據(jù)列類(lèi)型
字符串可以用老表示任何一種值盲再,所以它是最基本的類(lèi)型之一。
| 數(shù)據(jù)列類(lèi)型 | 存儲(chǔ)空間 | 說(shuō)明 | 最大長(zhǎng)度 |
|: ----------------------- |:-----------------|: --------------------|----------------------|
| CHAR[(M)] | M字節(jié) | 定長(zhǎng)字符串 | M字節(jié) |
| VARCHAR[(M)] | L + 1字節(jié) | 可變字符串 | M字節(jié) |
| TINYBLOD,TINYTEXT | L + 1字節(jié) | 非常小的BLOB(二進(jìn)制大對(duì)象) 和文本串 | 2^6 - 1字節(jié) |
| BLOB,TEXT | L + 2字節(jié) | 小BLOB和文本串 | 2^16 - 1字節(jié) |
| MEDIUMBLOB,DEDIUMTEXT | L + 3字節(jié) | 中等BLOB和文本串 | 2^24 - 1字節(jié) |
| LONGBLOB,LONGTEXT | L + 4字節(jié) | 大BLOB和文本串 | 2^32 - 1字節(jié) |
| ENUM('value1','value2',....) | 1或2 字節(jié) | 枚舉:可賦予某個(gè)枚舉成員 | 65535個(gè)成員 |
| SET('value1','value2',....) | 1,2,3,4,8, 字節(jié) |集合:可賦予某個(gè)集合成員 | 64個(gè)成員 |
字符串類(lèi)數(shù)據(jù)列類(lèi)型
| 數(shù)據(jù)列類(lèi)型 | 存儲(chǔ)空間 | 說(shuō)明 | 最大長(zhǎng)度 |
|: ----------------------- |:-----------------|: --------------------|----------------------|
| DATE | 3字節(jié) | "YYYY-MM-DD"格式表示的日期值 | 1000-01-01 ~ 9999-12-31 |
| TIME | 3字節(jié) | "hh:mm:ss"格式表示的時(shí)間值 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 |
| TIMESTAMP | 4字節(jié) | "YYYYMMDDhhmmss"格式表示的時(shí)間戳 | 19700101000000 ~ 2037年的某個(gè)時(shí)刻 |
| YEAR | 1字節(jié) | "YYYY"格式的年份值 | 1901 ~ 2155 |
NULL值
NULL 值可能使你感到奇怪瓣铣,直到你習(xí)慣它答朋。概念上,NULL意味著沒(méi)有值或未知值棠笑,且它被看成與眾不同的值梦碗。可以將NULL值插入到數(shù)據(jù)表中并從表中檢索它們蓖救,也可以測(cè)試某個(gè)值是否為NULL洪规,但不能對(duì)NULL值金像算術(shù)運(yùn)算,如果對(duì)NULL值進(jìn)行算數(shù)運(yùn)算循捺,其結(jié)果仍舊是NULL淹冰。在MySQL中,0或NULL都意味著假而其他意味著真巨柒。布爾運(yùn)算的默認(rèn)真值是1.
數(shù)據(jù)字段屬性
1.UNSIGNED
該屬性只能修飾數(shù)值類(lèi)型,不允許數(shù)列出現(xiàn)負(fù)數(shù)。
2.ZEROFILL
該屬性也只能用于設(shè)置數(shù)值類(lèi)型洋满,在數(shù)值類(lèi)型前自動(dòng)用0補(bǔ)足位數(shù)晶乔。
3.AUTO_INCREMENT
該屬性用于設(shè)置字段的自動(dòng)增量屬性,當(dāng)數(shù)值類(lèi)型的字段設(shè)置為自增量屬性時(shí)牺勾,每增加一條新的記錄正罢,該字段的值就自動(dòng)加1,而且此字段的值不允許重復(fù)
4.NULL和NOT NULL
默認(rèn)為NULL驻民,即插入值時(shí)沒(méi)有在此字段插入值翻具,默認(rèn)為NULL值,如果指定了NOT NULL , 則必須在插入值在此字段填入值回还。
5.DEFAULT
可以通過(guò)此屬性來(lái)指定一個(gè)默認(rèn)值裆泳,如果沒(méi)有在此列添加值,那么默認(rèn)添加此值柠硕。例如工禾,在用戶表user中可以將性別字段默認(rèn)設(shè)置成“男”。
數(shù)據(jù)表對(duì)象管理
創(chuàng)建表
創(chuàng)建數(shù)據(jù)表的主要是定義表結(jié)構(gòu)蝗柔,包括數(shù)據(jù)表的名稱(chēng)闻葵,字段名,字段類(lèi)型癣丧,約束和索引等槽畔。其基本語(yǔ)法如下
CREATE TABLE [IF NOT EXISTS] 表名稱(chēng)(
字段名1 列類(lèi)型 [屬性] [索引]
字段名2 列類(lèi)型 [屬性] [索引]
)[表類(lèi)型] [表字符集]
修改表
修改表是指修改表的結(jié)構(gòu),在實(shí)際的應(yīng)用中胁编,當(dāng)發(fā)現(xiàn)某個(gè)表的結(jié)構(gòu)不滿足要求時(shí)厢钧,可以用ALTER TABLE 語(yǔ)句來(lái)修改表的結(jié)構(gòu),包括添加新的字段掏呼、刪除原有的字段坏快、修改列的類(lèi)型、屬性憎夷、及索引莽鸿,甚至可以修改表的目名稱(chēng)等。修改表的語(yǔ)法如下:
ALTER TABLE 表名 ACTION; ------------ #修改表的語(yǔ)法格式
ALTER TABLE 表名 ADD 字段名 <建表語(yǔ)句> [FIRST | AFTER 列名] #為指定的表添加新列
mysql> ALTER TABLE users ADD name VARCHAR(30) NOT NULL FIRST;
mysql> ALTER TABLE users ADD height DOUBLE NOT NULL AFTER userpass;
為指定的數(shù)據(jù)表為了更改原有字段的類(lèi)型拾给,可使用CHANGE或MODIFY 子句祥得。如果原列的名字和新列的名字相同,則change和Modify的作用相同蒋得。語(yǔ)法格式如下
>```
ALTER TABLE 表名CHANGE(MODIFY) 列表 <建表語(yǔ)句> #為指定的表修改列類(lèi)型
mysql> ALTER TABLE users CHANGE telno phone INT UNSIGNED DEFAULT '0';
修改表名
ALTER TABLE 舊表名 RENAME AS 新表名 #為指定的數(shù)據(jù)表重新命名
刪除表
DROP TABLE 舊表名 RENAME AS 新表名 #刪除不再使用的數(shù)據(jù)表