資料表(table)
資料表是資料庫的基本組成元素,以記錄(行)和字段(列)組成的二位結構用於儲存資料。資料庫由表結構和表內容組成,先建立表結構,然後才能輸入資料。資料表結構設計主要包括欄位名稱,字段型別和字段屬性的設定。在關聯式資料庫中,為了確保資料的一致性和完整性,在建立表時除了必須指定欄位名稱、字段型別和字段屬性外,還需要使用約束(constraint)、索引(index)、主鍵(primary key)和外來鍵(foreign key)等功能屬性。
資料值和列型別
對musql中資料值的分類,有數值型、字元型、日期型和控制等,這和一般的程式語言的分類差不多。另外,mysql資料庫的表是乙個二維表,由乙個或多個資料列構成。每個資料列都有它的特定型別,該型別決定了mysql如何看待該列資料,我們可以把整形數值存放在字元型的列中,mysql則會把它當成字串處理。mysql中的列型別有三種:數值型、字串類和日期/時間類。從大類來看列型別和數值型別一樣,都是只有三種,但每一種列型別都還可細分。下面對各種列型別進行詳細介紹。
數值類的資料列型別
| 資料列型別 | 儲存空間 | 說明 | 取值範圍 |
| tintint | 1位元組 | 非常小的整數 | 帶符號值: -128 ~ 127
無符號值:0 ~ 256|
|smallint | 2位元組 | 較小的整數 |帶符號值:-32 768 ~ 32768
無符號值:0 ~ 65535 |
| mediumint| 3位元組 | 中等大小的整數 | 帶符號值:-8 388 608 ~ 8 388 607
無符號值:0 ~ 16 777 215|
| int| 4位元組 | 標準整數 | 帶符號值:-2 147 483 648 ~ 2 147 483 647
無符號值:0 ~ 4 294 967 295|
| bigint| 8位元組 | 大整數 | 帶符號值:-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
無符號值:0 ~ 18 446 744 073 709 551 615|
| float| 4 或 8位元組 | 單精度浮點數 | 最小非零值:±1.175494351e-38
最大非零值:±3.402823466e+38|
| double| 8位元組 | 雙精度浮點數 | 最小非零值:±2.2250738585072014e-308
最大非零值:±1.7976931348623157e+308|
| decimal| 自定義 | 以字串形式表示的浮點數 | 取決於儲存單元位元組數|
為了節省儲存空間和提高資料庫處理效率,我們應根據應用資料的取值範圍來選擇乙個最合適的資料列型別。如果把乙個超出資料列取值範圍的數存入該列,則mysql就會截斷該值,如:我們把99999存入 smallint(3)資料列裡,因為samllint(3)的取值範圍是-32 768 ~ 32768,所以就會截斷成32767儲存。顯示寬度3 不會影響數值的儲存,只影響顯示。
字串類資料列型別
字串可以用老表示任何一種值,所以它是最基本的型別之一。
| 資料列型別 | 儲存空間 | 說明 | 最大長度 |
| char[(m)] | m位元組 | 定長字串 | m位元組 |
| varchar[(m)] | l + 1位元組 | 可變字串 | m位元組 |
| tinyblod,tinytext | l + 1位元組 | 非常小的blob(二進位製大物件) 和文字串 | 2^6 - 1位元組 |
| blob,text | l + 2位元組 | 小blob和文字串 | 2^16 - 1位元組 |
| mediumblob,dediumtext | l + 3位元組 | 中等blob和文字串 | 2^24 - 1位元組 |
| longblob,longtext | l + 4位元組 | 大blob和文字串 | 2^32 - 1位元組 |
| enum('value1','value2',....) | 1或2 位元組 | 列舉:可賦予某個列舉成員 | 65535個成員 |
| set('value1','value2',....) | 1,2,3,4,8, 位元組 |集合:可賦予某個集合成員 | 64個成員 |
字串類資料列型別
| 資料列型別 | 儲存空間 | 說明 | 最大長度 |
| date | 3位元組 | "yyyy-mm-dd"格式表示的日期值 | 1000-01-01 ~ 9999-12-31 |
| time | 3位元組 | "hh:mm:ss"格式表示的時間值 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 |
| timestamp | 4位元組 | "yyyymmddhhmmss"格式表示的時間戳 | 19700101000000 ~ 2023年的某個時刻 |
| year | 1位元組 | "yyyy"格式的年份值 | 1901 ~ 2155 |
null值
null 值可能使你感到奇怪,直到你習慣它。概念上,null意味著沒有值或未知值,且它被看成與眾不同的值。可以將null值插入到資料表中並從表中檢索它們,也可以測試某個值是否為null,但不能對null值金像算術運算,如果對null值進行算數運算,其結果仍舊是null。在mysql中,0或null都意味著假而其他意味著真。布林運算的預設真值是1.
資料字段屬性
1.unsigned
該屬性只能修飾數值型別,不允許數列出現負數。
2.zerofill
該屬性也只能用於設定數值型別,在數值型別前自動用0補足位數。
3.auto_increment
該屬性用於設定欄位的自動增量屬性,當數值型別的字段設定為自增量屬性時,每增加一條新的記錄,該字段的值就自動加1,而且此字段的值不允許重複
4.null和not null
預設為null,即插入值時沒有在此字段插入值,預設為null值,如果指定了not null , 則必須在插入值在此字段填入值。
5.default
可以通過此屬性來指定乙個預設值,如果沒有在此列新增值,那麼預設新增此值。例如,在使用者表user中可以將性別字段預設設定成「男」。
資料表物件管理
建立表建立資料表的主要是定義表結構,包括資料表的名稱,欄位名,字段型別,約束和索引等。其基本語法如下
create table [if not exists] 表名稱(
欄位名1 列型別 [屬性] [索引]
欄位名2 列型別 [屬性] [索引]
)[表型別] [表字符集]
修改表修改表是指修改表的結構,在實際的應用中,當發現某個表的結構不滿足要求時,可以用alter table 語句來修改表的結構,包括新增新的字段、刪除原有的字段、修改列的型別、屬性、及索引,甚至可以修改表的目名稱等。修改表的語法如下:
alter table 表名 action; ------------ #修改表的語法格式
alter table 表名 add 欄位名 [first | after 列名] #為指定的表新增新列
mysql> alter table users add name varchar(30) not null first;
mysql> alter table users add height double not null after userpass;
為指定的資料表為了更改原有欄位的型別,可使用change或modify 子句。如果原列的名字和新列的名字相同,則change和modify的作用相同。語法格式如下
alter table 表名change(modify) 列表 #為指定的表修改列型別
mysql> alter table users change telno phone int unsigned default '0';
修改表名
alter table 舊表名 rename as 新錶名 #為指定的資料表重新命名
刪除表drop table 舊表名 rename as 新錶名 #刪除不再使用的資料表
mysql設計表月份 mysql,表設計
閒著沒事搞了一下,歡迎指教。使用者表 create table usr uid int 11 not null,name char 10 default null,primary key uid engine innodb default charset utf8 吃飯記錄表 create tabl...
mysql表的設計 mysql,表設計
閒著沒事搞了一下,歡迎指教。使用者表 create table usr uid int 11 not null,name char 10 default null,primary key uid engine innodb default charset utf8 吃飯記錄表 create tabl...
mysql豎向表設計 mysql,表設計
閒著沒事搞了一下,歡迎指教。使用者表 create table usr uid int 11 not null,name char 10 default null,primary key uid engine innodb default charset utf8 吃飯記錄表 create tabl...