標籤:img 二進位 注意 64位 wps 預設值 存在 表示 欄位名
枚舉字串
枚舉字串指的是在定義之初就確定要存放的字串有哪些,然後在資料進行儲存的時候就只能儲存已經定義過的字串,只能使用任意的一個字串。(單選框)
文法:enum
欄位名 enum(字串1,字串2,…); 枚舉採用最多2個位元組儲存資料,最多能存65535個資料
枚舉的意義
1. 規範資料:沒有進行維護的資料不能插入
2. 節省空間的:實際儲存的資料是數字
雖然SQL是一種強型別語言,但是SQL能夠自動轉換資料類型(與php一樣)
select有一個特點:後面可以跟任意運算式
證明枚舉儲存的是數字
枚舉的字串與數值的關係
因為枚舉內部真實儲存的數值,因此枚舉可以通過數值進行資料插入。
枚舉儲存原理
枚舉的應用
1. 固定的不變的,但是具有多個值的資料可以使用枚舉
集合字串
集合字串與枚舉字串大致一致,但是集合資料指的是可以選中定義的值中間的部分資料或者全部資料。多選
文法:set
欄位名 set(字串1,字串2,…);
集合中的資料,每一個資料都是佔用一個位元組中的一個位來進行表示,然後儲存是數值卻是所有的位共同轉換成十進位顯示
資料在集合中佔位的原理
換算的時候需要將二進位顛倒過來,然後進行換算成十進位。
set最多佔用8個位元組儲存資料:8個位元組共64位,最多集合只能存放64個元素,但是組合卻有2^64之多。
集合的意義
1. 規範了資料,只能儲存定義過的資料
2. 節省了空間
雖然集合和枚舉都能夠為資料庫節省空間的,並且能夠規範資料,但是作為php程式員,增加了php維護資料的難度,所以php程式員基本上不使用這兩種資料類型。
時間日期類型
SQL中用來儲存時間或者日期的資料類型
| 類型 |
顯示格式 |
取值 |
儲存空間 |
零值 |
| DATETIME |
YYYY-MM-DD HH:MM:SS |
‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘ |
8 |
0000-00-00 00:00:00 |
| TIMESTAMP |
YYYY-MM-DD HH:MM:SS |
是‘1970-01-01 00:00:00’到2038-01-19 03:14:07 |
4 |
0000-00-00 00:00:00 |
| DATE |
YYYY-MM-DD |
‘1000-01-01‘到‘9999-12-31 |
3 |
0000-00-00 |
| TIME |
HH:MM:SS |
-838:59:59‘到‘838:59:59‘ |
3 |
00:00:00 |
| YEAR |
YYYY |
1901到2155 |
1 |
0000 |
datetime:日期時間,8個位元組儲存
timestamp:時間戳記,使用標準整型儲存,不是整型資料,而是與datetime格式一樣的資料
date:datetime的日期部分
time:datetime的時間部分,time表示的不是時間點,是時間段
year:年份,1個位元組儲存,只能表示255年
時間格式:表示時間段
作為php程式員,基本上不適用SQL的任何時間格式,都是使用php的時間戳記
在mysql中,任意一條記錄的長度不能超過65535個位元組。
varchar的理論資料長度是65535個字元
GBK/UTF8編碼最大的varchar長度
在SQL中,所有的欄位只要有一個欄位允許為空白,那麼整條記錄就需要留出一個位元組用來儲存null,如果有多個欄位為空白,也只需要一個位元組。
text文本類型不佔用記錄的總長度,是額外開闢空間的儲存資料,但是text欄位本身要佔據一定的資料長度(10個位元組)
列屬性
除了資料類型對列進行資料規範之外,還有一些額外的限制對欄位進行約束。
列屬性:NULL/not null,default,primary key,auto_increment,comment,unique key
NULL
欄位是否允許為空白,不允許為空白就是not null。
文法:欄位名 資料類型 NULL/NOT NULL,預設的是null
預設值
關鍵字default,在定義結構的時候,如果欄位沒有被指定資料,那麼系統會使用預設的資料來進行資料填充。
預設值的使用
1. 要使用預設值,不對該欄位進行資料插入(欄位列表不能出現對應的欄位)
2. 要使用預設值,可以在資料值插入的位置使用default關鍵字
主鍵
主要的鍵,用主鍵修飾的欄位,不能為null,也不能出現任意資料的重複。能夠唯一的標識出一條記錄。一張表只能有一個主鍵。
添加主鍵:
1. 在要做主鍵的欄位之後添加primary key關鍵字
2. 在所有的欄位之後,指定主鍵,可以指定複合主鍵(多欄位主鍵)
文法:primary key(欄位列表)
3. 假設表已經存在了,但是需要增加主鍵,可以通過修改表的結構來增加主鍵:必須實現保證該欄位的資料沒有重複。
a) 修改欄位,給欄位增加primary key屬性
b) 可以直接通過修改表結構增加主鍵(複合主鍵)
主要的效果:具有唯一性,不能插入重複的資料
主鍵不能修改,但是可以刪除
文法:修改表結構
alter table 表名 drop primary key;
自增長
auto_increment,當某個欄位有了自增長屬性之後,如果改欄位在進行資料新增的時候,沒有指定資料,那麼系統會自動在原有的基礎上自動+1,說明欄位類型必須是整型。
自動成長通常是搭配主鍵使用
自增長的應用
1. 不為當前欄位賦值
2. 可以為自動成長欄位使用null/default關鍵字顯示的調用
自動成長之所以能夠填充對應的資料,是因為在表的選項中已經指定好對應的值了
修改自動成長:修改自動成長下一個子增長值,但是修改的值只能比當前已有的資料的值要大,而不能小。
alter table 表名 auto_increment = 值
效果
刪除自增長
alter table 表名 modify 欄位 不再增加auto_increment屬性;
auto_increment往往搭配主鍵:刪除主鍵
想要刪除有自動成長的主鍵,必須先刪除自動成長再刪除主鍵。
自增長控制:初始值和步長
show variables like ‘auto_increment%’;
注意:一張表只能有一個自增長。
修改步長
set auto_increment_increment = 2;
效果
這種修改是針對目前使用者當前串連有效(會話層級)
作業:
1. 製作一個教學管理系統的資料庫:學生,班級,老師等,根據不同的資料的需求確定對應的屬性和資料類型
2. 製作小網站:教學管理系統
a) 登入驗證,查看所有的學生資訊
b) 老師能夠查看所有的資訊
20141230 mysql數實值型別和列屬性一