mysql資料庫內容總結
數字型別:
tinyint(m) unsigned zerofull
1個位元組 預設的是有符號的-128~127
unsigned: 無符號整數 範圍0~255
m: 代表寬度 (在zerofull時才有意義),只是乙個顯示效果,不會影響到實際的資料長度
zerofull: 零填充(如果某列是zerofull預設就是unsigned) 因為不會有 0000-1 的情況
零填充(例: 0005,多少個零就是m限制寬度)
列一般不要為null
原因一,null不好比較(等號比較不可用,只可用is null 或 is not null);
原因二,null執行效率更低,可用not null default 0 指定預設值
smallint 同tinyint用法
2個位元組 預設有符號範圍-32768~32767; 無符號範圍0~65535
mediumint 同tinyint用法
3個位元組 預設有符號範圍-8388608~8388607;無符號範圍0~16777215
int 同tinyint用法
4個位元組 預設有符號範圍-2147483648~2147483647; 無符號範圍0~4294967295
bigint 同tinyint用法
8個位元組 預設有符號範圍-9223372036854775808-9223372036854775807;無符號範圍0~18446744073709551615
float(m,d) 浮點型
四個位元組
float(6, 2)表示共有六位(不加小數點),小數佔兩位.
mysql中可以指定小數字數,sql server和oracle中是不允許指定小數字數的
double(m,d) 浮點型
八個位元組
double(6, 2)表示共有六位(不加小數點),小數佔兩位.
mysql中可以指定小數字數,sql server和oracle中是不允許指定小數字數的
decimal(m,d) 定點型
使用同浮點型,只是更精確。
例:float(9,2) decimal(9,2) 存入1234567.23,float會顯示為1234567.25,而decimal會顯示1234567.23,更精確。
浮點和定點型是四個位元組或八個位元組
文字型別:
char char(m),m代表寬度 0 到 255個字元之間
,可容納的字元數(不是位元組,乙個位元組佔八位,乙個漢字佔兩個位元組,utf-8的漢字佔三個位元組),char(8),可存放八個漢字
varchar 變長 varchar(m) m代表寬度 0 到 65535個位元組之間, 大約能存放22000個漢字左右
有1-2個位元組來標記真實的長度
char和varchar區別:
1、char是定長,varchar是變長
2、char的最大的儲存長度是255個字元,這與字符集的設定沒有關係;而varchar的最大長度則是與字符集的設定有關的
因此,如果設定的字符集為
latin1:乙個字元是乙個位元組 ----->則能夠儲存的最大字元數是65532個
gbk:乙個字元是兩個位元組------->則能夠儲存的最大字元數是65532/2個
utf-8:乙個字元是三個位元組------->則能夠儲存的最大字元數是65532/3個
char定長:m個字元,如果存的小於m個字元,實佔m個字元,用空格補齊
varchar變長:m個字元,存的小於m個字元,設為n,n <= m,實佔n個字元
3、利用率
型別 寬度 可存字元 實存字元(i<=m)實佔空間利用率
char(m) m m i m i/m <= 100%
varchar m m i i字元+(1-2)位元組 i/(i + 1-2) <= 100%
char有可能等於百分百,例: 四位學號char(4),利用率為100%;varchar利用率永遠小於100%
4、char的速度快於varchar
text:是文字型別 能夠儲存比較大的資料 但是搜尋的速度比較慢,沒有全文索引 沒有寬度 加了也沒用
因此 如果不是比較大的資料 則建議採用char或者varchar來進行查詢
日期型別:
年 year
日期 date
時間 time
日期時間 datetime
時間戳 timestamp
year型別 乙個位元組 表示 1901-2155[0000,表示錯誤時選擇]
如果輸入2位,'00-69' 表示 2000-2023年 加2000 計算機的元年是從2023年開始
'70-99' 表示 1970-2023年 加1900
推薦輸入四位
date型別 典型格式 1992-08-12
儲存的範圍:'1000-01-01'-->'9999-12-31'
time時間型別 典型格式 hh-mm-ss
儲存的範圍: '-838:59:59'-->'838:59:59'
datetime日期時間型別 典型格式 '1992-09-28 12:23:23'
儲存的範圍: '1000-01-01 00:00:00'-->'9999-12-31 23:59:59'
timestamp時間戳型別
是1970-01-01:00:00:00,到當前的秒數
計算很精確,也可以方便的格式化
注意:真正開發中,很少用日期時間型別來表示乙個需要精確到秒的列,而是用時間戳型別來表示
原因:雖然日期時間型別能精確到秒,並且方便檢視,但是遇到邊界日期計算時很麻煩,不精確,像平年和閏年2月
mysql部門無限分類 mysql 無限級分類
兩種思路吧,遞迴 和 非遞迴 遞迴 arr 1 id 1,pid 0 2 id 2,pid 0 3 id 3,pid 1 4 id 4,pid 1 5 id 5,pid 0 6 id 6,pid 3 7 id 7,pid 6 8 id 8,pid 3 9 id 9,pid 4 10 id 10,pi...
Mysql 查詢部門下所有部門
話不多說,直接上sql select dept id,dept name from select t1.dept id,t1.dept name,if find in set parent id,pids 0,pids concat pids,dept id 0 as ischild from se...
mysql部門人員排序設計 MySQL閒談(一)
話外 mysql算是目前最流行的關係學資料庫管理系統,但是mysql中的 my 含義是什麼?可能能很多人都會說命名者想與使用者搞好關係,直接翻譯成 我的sql 讓使用者倍感親切,其實真實原因是mysql創始人monty 其女兒名為 my widenius,monty1995年建立mysql時直接用其...