六天帶你玩轉mysql資料庫--第二天(上)
阿新 • • 發佈:2018-12-16
對第一天所學知識點進行回顧總結:
資料庫的基礎知識:關係型資料庫(儲存在磁碟)和非關係型資料庫(記憶體) 關係型資料庫:建立在關係模型上的資料庫。三大元件包括: 資料結構:二維表(比較浪費空間) 操作資料的指令集合:SQL(DDL:資料定義,DML(DQL):資料操作查詢,DCL:(資料控制)) 完整性約束:表內與表之間(實體) mysql關係型資料庫:c/s結構軟體(連線認證,傳送SQL指令,伺服器處理指令返回結果,客戶端接受並解析結果) mysql伺服器物件:DBMS---->Database------>Table------>fields(欄位) SQL的基本操作:庫操作,表操作(欄位)和資料操作。 字符集問題:中文資料問題。 改變伺服器接受資料的字符集:character_set_client; 改變伺服器返回資料的字符集:character_set_resuts; 快捷方式:set names 字符集 校對集問題:比較規則,_bin,_cs,_ci,利用了排序來實現(order by) web亂碼問題 瀏覽器解析,PHP處理(本地檔案),資料庫處理。
mysql的資料型別(列型別):
所謂的資料型別,對資料進行統一的分類,從系統的角度出發為了能夠使用統一的方式來進行管理,更好的利用有效的空間。
SQL中將資料型別分成了三大類:數值型別,字串型別和時間日期型別。
數值型:
數值型:都是數值,系統將數值分為整數型和小數型。
整數型:
整數型:用int存放整形資料,佔四個位元組,在SQL中因為更多要考慮如何節省磁碟空間,所以系統將整數又細分了5類: Tinyint:迷你整型使用一個位元組儲存,表示的狀態最多為256位元組(常用)。 smallint:小整型,使用兩個位元組儲存,表示的狀態最多為65536種。 mediumint:中整型,使用三個位元組儲存。 int:標準整型,使用四個位元組儲存。(常用) bigint:大整型,使用八個位元組儲存。(很少需要大整型來處理資料)
建立一張整形表並插入欄位資訊:
1.建立整型表: create table my_int( int_1 tinyint, int_2 smallint, int_3 int, int_4 bigint )charset utf8; 2.插入資料:只能插入整型,只能插入範圍內的整型。 ---插入有效資料: insert into my_int values(100,100,100,100); ---插入無效資料,資料型別不正確: insert into my_int values('a','b','199','f'); ---插入資料超出範圍報錯: insert into my_int values('255',10000,10000,10000);
無符號型別資料的處理:
SQL中的數值型別全部預設有符號,分正負;有時候需要使用無符號資料,需要給資料限定型別:int unsigned;--無符號從零開始
---給表增加一個無符號型別
alter table my_int add int_5 tinyint unsigned;
查看錶結構: desc my_int;
重新進行資料的插入可以看到設定無符號型別之後可以正確插入資料:
insert into my_int values('127',10000,10000,10000,255);
顯示寬度:
查看錶結構的時候,會發現每個欄位的資料型別之後都會自帶一個括號,裡面有指定的數字。
desc my_int;
數字叫做顯示寬度,是指資料最終顯示的位數。例如:-123表示的是4位顯示寬度(包括括號),255是3位寬度。
顯示寬度的真正含義:
顯示寬度的意思只是預設的告訴使用者顯示形式而已,這個是使用者可以控制的,這種控制不會改變資料大小。
舉例:alter table my_int add int_6 tinyint(1) unsigned; ---指定顯示寬度為1
desc my_int; 檢視欄位資訊
insert into my_int values(127,0,0,0,255,255); 插入資料資訊
select * from my_int; 查看錶內資料
零填充的意義(顯示寬度):保證資料格式
從上圖來看,儘管我們設定了顯示寬度為1,但是255這個資料還是依舊正常的顯示,這就說明資料的大小是由資料的型別
決定,顯示寬度的意義在於當資料不夠顯示寬度的時候,會自動讓資料變成對應的顯示寬度。通常需要
搭配一個前導0來增加寬度,不改變值的大小;zerofill(零填充)會導致數值自動變成無符號。
例如:
alter table my_int add int_7 tinyint(2) zerofill; --顯示寬度為2,零填充
desc my_int;
insert into my_int values(1,1,1,1,1,1,1);
insert into my_int values(100,100,100,100,100,100,100);
select * from my_int; 可以看到唯一的一個1變成了01,這個就是零填充的含義
小數型:
小數型:帶有小數點或者範圍超出整型的數值型別。
SQL中:將小數型細分成兩種:浮點型和定點型。
浮點型:小數點浮動,精度有限,而且會丟失精度。對資料精確不要求,數量級別比較大的時候使用浮點型
定點型:小數點固定,精度固定,不會丟失精度。資料想要精確使用定點型
浮點型:
浮點型資料是一種精度型資料,因為超出指定範圍之後,會丟失精度(自動四捨五入)
浮點型:理論分為兩種精度
float:單精度,佔用四個位元組儲存資料,精度範圍大概為7位左右。
double:雙精度,佔用八個位元組儲存資料,精度範圍大概為15位左右。
浮點數表:
建立浮點數表:浮點的使用方式:直接float表示沒有小數部分;float(M,D):M表示總長度,D代表小數部分長度,
整數部分長度為M-D。
--浮點數表
create table my_float(
f1 float,
f2 float(10,2), ---10位在精度範圍之外,這個指的是插入資料依據2位小數和8位整數
f3 float(6,2) ---6位在精度範圍之內,這個指的是插入資料依據2位小數和4位整數
)charset utf8;
desc my_float;
插入資料:可以直接是小數,也可以是科學計數
insert into my_float values(1000.10,1000.10,1000.10); ---符合條件
insert into my_float values(1234567890,12345678.90,1234.56); ---符合條件
insert into my_float values(3e38,3.01e7,1234.56); --符合條件
insert into my_float values( 9999999999,99999999.99,9999.99); --最大值
浮點型資料的插入:整數部分是不能超出長度的,但是小數部分可以超出長度(因為系統會四捨五入)
---超出長度來插入資料
insert into my_float values(123456,1234.123456768,123.9876543); 小數部分超過設定的兩位但是可以插入成功。
insert into my_float values(123456,1234.12,12345.12); 整數部分找出設定無法插入資料
資料結果:浮點數一定會進行四捨五入(超出精度範圍),浮點數如果是因為系統進位導致整數部分超過指定長度,那麼
系統也允許成立。
select * from my_float;
定點型
定點型:絕對的保證整數部分不會被四捨五入(不會丟失精度),小數部分有可能(理論小數部分也不會丟失精度 )
建立定點數表:以浮點數作為對比
建立定點數表:
create table my_decimal(
f1 float(10,2)
d1 decimal(10,2)
)charset utf8;
desc my_decimal;
插入資料:定點數的整數部分一定不能超出長度(進位不可以),小數部分的長度可以隨意超出,因為系統自動四捨五入。
insert into my_decimal values(12345678.90,12345678.90); --有效資料
insert into my_decimal values(1234.123456,1234.1234356); --小數部分超出
檢視警告:
show warnings;
浮點數如果進位導致長度溢位沒有問題,但是定點數不可以。
insert into my_decimal values(99999999.99,99999999.99); --沒有問題
insert into my_decimal values(99999999.99,99999999.999); --定點數進位導致整數部分超出範圍
檢視資料效果:
select * from my_decimal;