20141230 mysql数值类型和列属性二
枚舉字符串
枚舉字符串指的是在定義之初就確定要存放的字符串有哪些,然后在數(shù)據(jù)進行存儲的時候就只能存儲已經(jīng)定義過的字符串,只能使用任意的一個字符串。(單選框)
語法:enum
字段名 enum(字符串1,字符串2,…); 枚舉采用最多2個字節(jié)保存數(shù)據(jù),最多能存65535個數(shù)據(jù)
枚舉的意義
1. 規(guī)范數(shù)據(jù):沒有進行維護的數(shù)據(jù)不能插入
2. 節(jié)省空間:實際存儲的數(shù)據(jù)是數(shù)字
雖然SQL是一種強類型語言,但是SQL能夠自動轉(zhuǎn)換數(shù)據(jù)類型(與php一樣)
select有一個特點:后面可以跟任意表達(dá)式
證明枚舉存儲的是數(shù)字
枚舉的字符串與數(shù)值的關(guān)系
因為枚舉內(nèi)部真實存儲的數(shù)值,因此枚舉可以通過數(shù)值進行數(shù)據(jù)插入。
枚舉存儲原理
枚舉的應(yīng)用
1. 固定的不變的,但是具有多個值的數(shù)據(jù)可以使用枚舉
集合字符串
集合字符串與枚舉字符串大致一致,但是集合數(shù)據(jù)指的是可以選中定義的值中間的部分?jǐn)?shù)據(jù)或者全部數(shù)據(jù)。多選
語法:set
字段名 set(字符串1,字符串2,…);
集合中的數(shù)據(jù),每一個數(shù)據(jù)都是占用一個字節(jié)中的一個位來進行表示,然后保存是數(shù)值卻是所有的位共同轉(zhuǎn)換成十進制顯示
數(shù)據(jù)在集合中占位的原理
換算的時候需要將二進制顛倒過來,然后進行換算成十進制。
set最多占用8個字節(jié)存儲數(shù)據(jù):8個字節(jié)共64位,最多集合只能存放64個元素,但是組合卻有2^64之多。
集合的意義
1. 規(guī)范了數(shù)據(jù),只能存儲定義過的數(shù)據(jù)
2. 節(jié)省了空間
雖然集合和枚舉都能夠為數(shù)據(jù)庫節(jié)省空間,并且能夠規(guī)范數(shù)據(jù),但是作為php程序員,增加了php維護數(shù)據(jù)的難度,所以php程序員基本上不使用這兩種數(shù)據(jù)類型。
時間日期類型
SQL中用來存儲時間或者日期的數(shù)據(jù)類型
| 類型 | 顯示格式 | 取值 | 存儲空間 | 零值 |
| 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個字節(jié)存儲
timestamp:時間戳,使用標(biāo)準(zhǔn)整型存儲,不是整型數(shù)據(jù),而是與datetime格式一樣的數(shù)據(jù)
date:datetime的日期部分
time:datetime的時間部分,time表示的不是時間點,是時間段
year:年份,1個字節(jié)存儲,只能表示255年
時間格式:表示時間段
作為php程序員,基本上不適用SQL的任何時間格式,都是使用php的時間戳
在mysql中,任意一條記錄的長度不能超過65535個字節(jié)。
varchar的理論數(shù)據(jù)長度是65535個字符
GBK/UTF8編碼最大的varchar長度
在SQL中,所有的字段只要有一個字段允許為空,那么整條記錄就需要留出一個字節(jié)用來保存null,如果有多個字段為空,也只需要一個字節(jié)。
text文本類型不占用記錄的總長度,是額外開辟空間的存儲數(shù)據(jù),但是text字段本身要占據(jù)一定的數(shù)據(jù)長度(10個字節(jié))
列屬性
除了數(shù)據(jù)類型對列進行數(shù)據(jù)規(guī)范之外,還有一些額外的限制對字段進行約束。
列屬性:NULL/not null,default,primary key,auto_increment,comment,unique key
NULL
字段是否允許為空,不允許為空就是not null。
語法:字段名 數(shù)據(jù)類型 NULL/NOT NULL,默認(rèn)的是null
默認(rèn)值
關(guān)鍵字default,在定義結(jié)構(gòu)的時候,如果字段沒有被指定數(shù)據(jù),那么系統(tǒng)會使用默認(rèn)的數(shù)據(jù)來進行數(shù)據(jù)填充。
默認(rèn)值的使用
1. 要使用默認(rèn)值,不對該字段進行數(shù)據(jù)插入(字段列表不能出現(xiàn)對應(yīng)的字段)
2. 要使用默認(rèn)值,可以在數(shù)據(jù)值插入的位置使用default關(guān)鍵字
主鍵
主要的鍵,用主鍵修飾的字段,不能為null,也不能出現(xiàn)任意數(shù)據(jù)的重復(fù)。能夠唯一的標(biāo)識出一條記錄。一張表只能有一個主鍵。
添加主鍵:
1. 在要做主鍵的字段之后添加primary key關(guān)鍵字
2. 在所有的字段之后,指定主鍵,可以指定復(fù)合主鍵(多字段主鍵)
語法:primary key(字段列表)
3. 假設(shè)表已經(jīng)存在了,但是需要增加主鍵,可以通過修改表的結(jié)構(gòu)來增加主鍵:必須實現(xiàn)保證該字段的數(shù)據(jù)沒有重復(fù)。
a) 修改字段,給字段增加primary key屬性
b) 可以直接通過修改表結(jié)構(gòu)增加主鍵(復(fù)合主鍵)
主要的效果:具有唯一性,不能插入重復(fù)的數(shù)據(jù)
主鍵不能修改,但是可以刪除
語法:修改表結(jié)構(gòu)
alter table 表名 drop primary key;
自增長
auto_increment,當(dāng)某個字段有了自增長屬性之后,如果改字段在進行數(shù)據(jù)新增的時候,沒有指定數(shù)據(jù),那么系統(tǒng)會自動在原有的基礎(chǔ)上自動+1,說明字段類型必須是整型。
自動增長通常是搭配主鍵使用
自增長的應(yīng)用
1. 不為當(dāng)前字段賦值
2. 可以為自動增長字段使用null/default關(guān)鍵字顯示的調(diào)用
自動增長之所以能夠填充對應(yīng)的數(shù)據(jù),是因為在表的選項中已經(jīng)指定好對應(yīng)的值了
修改自動增長:修改自動增長下一個子增長值,但是修改的值只能比當(dāng)前已有的數(shù)據(jù)的值要大,而不能小。
alter table 表名 auto_increment = 值
效果
刪除自增長
alter table 表名 modify 字段 不再增加auto_increment屬性;
auto_increment往往搭配主鍵:刪除主鍵
想要刪除有自動增長的主鍵,必須先刪除自動增長再刪除主鍵。
自增長控制:初始值和步長
show variables like ‘a(chǎn)uto_increment%’;
注意:一張表只能有一個自增長。
修改步長
set auto_increment_increment = 2;
效果
這種修改是針對當(dāng)前用戶當(dāng)前連接有效(會話級別)
作業(yè):
1. 制作一個教學(xué)管理系統(tǒng)的數(shù)據(jù)庫:學(xué)生,班級,老師等,根據(jù)不同的數(shù)據(jù)的需求確定對應(yīng)的屬性和數(shù)據(jù)類型
2. 制作小網(wǎng)站:教學(xué)管理系統(tǒng)
a) 登錄驗證,查看所有的學(xué)生信息
b) 老師能夠查看所有的信息
posted on 2017-02-22 18:40?山山未遲 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lifushan/p/6430434.html
總結(jié)
以上是生活随笔為你收集整理的20141230 mysql数值类型和列属性二的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GRUNT----JSHINT
- 下一篇: Oracle查询数据库中所有表的记录数