整型、浮點型、定點型、時間日期型別、字串型別、text、enum、列屬性、三大範式、表關係

2020-08-11 23:36:02

整型

分類:
迷你整型tinyint:系統採用一個位元組來儲存的整型,一個位元組8位元,範圍0~255
小整型smallint:採用兩個位元組儲存整型,範圍0~65535
中整型mediumint:採用三個位元組儲存
整型int:採用四個位元組儲存
大整型bigint:採用八個位元組儲存

顯示長度
顯示長度:數據(整型)在現實數據的時候到底可以實現多少位
tinyint(3):表示最長可以實現3位,unsigned說明只是整數,永遠不會超過三位長度
tinyint(4):表示最長四位,範圍-128~127
顯示長度只是代表了數據是否可以達到指定長度,但是不會自動滿足到指定長度,如果要顯示數據的時候,保持最高位(顯示長度),還需要給欄位以惡搞zerofill屬性纔可以
zerofill:從左側開始填充0,(左側可以保證數據的大小不變),所以負數的時候不能使用zerofill,一旦使用預設開啓usigned屬性,如果不足3位,那麼就填充到3位,如果本身欄位已經夠或者超出,那麼就不會再填充,顯示長度可以自己設定,超出長度(但是不超出範圍),不會影響,只會不夠的進行補充(顯示長度)

小數型別

作用:儲存小數,在mysql中,分爲浮點型和定點型

浮點型
浮點型又稱爲精度型別,是一種有可能丟失精度的數據型別,數據有可能不那麼準確(尤其是超出範圍的時候),不是數據大小範圍,是精度範圍
浮點型之所以能夠儲存比較大的數據,利用儲存數據的位來儲存指數
浮點型:有部分用於儲存數據,有部分部儲存指數

float單精度浮點型
系統提供4個位元組儲存數據,但是能表示的數據範圍比整型的大的多,大約是10^38次方,只能保證大概7個左右的精度(如果數據在7位以內,那麼基本準確,若超出7位,就有精度丟失)
基本語法:
float:表示不指定小數位的浮點數
float(M,D)::表示一共儲存M個有效數位,其中小數部分佔8位元,
float(10,2):: 表示整數部分9=8位元,小數部分2位,
浮點數的應用:通常使用與儲存保證一些數量特別大的、大到不能那麼的精確。比如:宇宙星體數量

double雙精度浮點型
習題用8個位元組來儲存數據,表示的範圍更大,大概10^308次方,但是精度只有15位,
基本語法:與float一致,

定點型
定點數:數據精度的小數(小數部分可能不精確,超出精度會四捨五入,但是整數部分一定精確)

decimal定點型
decimal定點數:習題自動根據儲存的數據來分配儲存空間,每大概9個數據就會分配4個字元來進行儲存,同時小數和整數是分開的
decimal(M,D):M表示總長度,最大不超過65,D表示小數部分,最長不超過30,
定點數的應用:如果涉及到錢的時候,可以用定點數,因爲整型部分不會丟失,

時間日期型別

date日期型別:系統使用三個位元組來儲存數據,對應的格式爲:yyyy-MM-dd,能表示的範圍的10000-01-01~9999-12-12初始值爲0000-00-00

time時間型別,能夠表示某個指定的時間,但是系統同樣時提供3個位元組來儲存,對應的格式爲HH:mm:ss,但是再mysql中time麼型別能表示的時間範圍大的多,表示:-838:59:59~838-59-59,再mysql中具體的用處來描述時間段的

datetime日期時間型別:就是將前兩者聯繫起來,表示時間的型別,使用八個位元組來儲存數據,格式爲:yyyy-MM-dd HH:mm:ss 能夠表示的區間:10000-01-01 00:00:00~9999-59-59,可以爲0值:0000-00-00 00:00:00

timestamp時間戳型別:再MySQL中的時間戳只是表示從格林威治時間開始,格式爲yyyy-MM-dd HH:mm:ss

year年型別:佔用一個位元組來儲存,表示1900~2155年,大那是year有兩種插入方式:0-99或者四位數的具體年

字串

char定長字串,指定長度後,系統會分配指定的空間用於儲存數據,基本語法:char(L):L表示字串(中文和英文的長度都是0~255)

varchar變長字串:指定長長度之後,系統會根據實際儲存的數據來計算長度,分配適合的長度,(數據滅有超出長度)
基本語言:varchar(L):L表示長度,理論範圍0~65535
因爲varchar要記錄數據長度(系統根據數據長度自動分配空間),所以每個varchar數據產生後,系統都會再數據的後面增加1~2個位元組的額外開銷,用來儲存數據所佔空間的長度,如果數據本身小於127個字元額外開胸啊爲1個位元組,如果大於127,額外開銷2個位元組
char和varchar數據儲存對比:utf8一個字元只能用3個位元組

char和varchar區別:char一定會使用指定的空間,varchar是根據來定空間的,char的數據查詢效率比varcahr高,varchar是需要通過後面記錄數來計算的,如果確定數據佔有一定的指定長度,要使用char,如果不確定就用char
如果數據長度超過了255,不論是否固定長度,都會使用text,不會再使用varchar或者char

text

文字型別:mysql提供了兩種文字型別
text:儲存不同的字元文字,
blob:儲存二進制文字,比如圖片、檔案,但是一般不儲存不會使用blob來儲存檔案本身,通常使用路徑來儲存
text系統提供了四種
tinytext:系統會使用一個位元組來儲存,範圍2^8+1
text:2位元組儲存,範圍2^16+2
mediumtext:3個位元組儲存,範圍 3^24+3
longtext:三個位元組,範圍4^32+4
注意1.再使用對應的儲存檔案的時候,不用可以去選擇text型別,系統會自動根據儲存的數據長度來選擇適合的文字型別
2.選擇字串儲存的適合,如果數據超過255,那麼就選擇text型別,它效率高

enum

列舉型別:數據插入之前,先設定幾個項,這幾個項就是可能最終出現的數據結果,如果確定某個欄位的數據只有那麼幾個,比如性別,系統這就可以在設定欄位的時候規定當前欄位只能固定的幾個值,使用列舉,
系統提供紅12個位元組儲存列舉數據,通過計算enum列舉的具體值來選擇實際的儲存空間,如果數據值列表在255以內,那麼就一個位元組,如果25565536之間就兩個位元組
基本格式enum(數據值 1,數據值 2)

列屬性

列屬性也叫欄位屬性,在mysql中,一共有6個屬性,null、預設值、列描述、主鍵、唯一主鍵、自動增長

null
代表欄位爲空,如果對應的值是yes,表示該欄位可以爲null
注意,在設計表的時候,儘量不要讓數據爲空,
mysql的記錄長度是65535個位元組,如果一個表中有欄位允許爲null,那麼系統就會設計一個保留一個位元組來儲存null,最終有效的儲存長度爲65535,

預設值
當前欄位被設計之後,如果允許預設條件下,使用者不進入數據的插入,那麼就可能使用實現準備阿紅的數據來填充,通常爲null
default:關鍵字,另外一層使用,顯示的告知該欄位使用預設值,在進行數據插入的時候,對欄位值,直接使用default

列描述
comment是專門給用於開發人維護的以惡搞註釋說明
基本語法:comment 欄位描述
檢視coment:必須通過檢視錶的建立語句

主鍵
主要的鍵,primary key在一張表中,有且只有一個欄位,裏面的值具有唯一性,與其他欄位沒有任何衝突,保證數據的唯一性
建立主鍵:1.兩種方式,
隨表建立:2.兩種方式:1)、直接在需要當作主鍵的欄位之後,增加primary key屬性,來確定主鍵 2)、在欄位後面增加主鍵屬性
2.在所有欄位之後增加primary key選項,primary key(欄位資訊)
創表之後
基本語法:alter table 表名 addprimary key(欄位)

檢視主鍵
通過查詢表結果desc 表名,pri主鍵描述,非空且唯一
檢視錶的建立語句show create table 表名

刪除主鍵
基礎語法:alter table 表名 drop primary key
包留了非空條件

複合主鍵
主鍵約束:主鍵一旦新增,那麼對應的欄位有數據要求了
當前欄位對應的數據不能爲空
當前欄位對應的數據不能有重複
主鍵分類:
採用的是主鍵對應的欄位業務意義分類
業務主鍵:主鍵所在欄位,具有業務意義
邏輯主鍵:主鍵所在的欄位,沒有業務意義,通過使用自然增長整型

唯一鍵
unique key,用來保證對應的欄位中數據的唯一性,
主鍵額可以用來保證數據的唯一性,但是一張表中只能有一個主鍵,多個欄位都是由需求要用到唯一的約束的話,可以使用唯一鍵,
1.唯一鍵在一張白哦中可以出現多次
2。唯一鍵允許欄位值爲null,null可以有多個,null不參與比較
基本語法 alter table 表名 drop index 唯一鍵名
index關鍵字:索引,唯一鍵是索引的一種,提升查詢效率

自動增長
自動增長:auto_increment當給定某個欄位該屬性後,該列的數據在沒有提供確定數據的時候,系統會根據之前儲存的數據自動增加後,填充數據
通常使用在邏輯主鍵上
原理:
1.系統要維護一組數據,用來儲存當前使用的自動增長屬性的欄位,記住當前對應的數據值,再給的那個以惡搞指定的步長,
2.當使用者進行數據插入的時候,如果沒有給定值,系統再原始值上加上步長變成新的數據插入,
3.自動增長只適用於數值
4.自動增長的觸發,給定的屬性欄位沒有提供值
基本語法:再欄位後面增加一個屬性 auto_increment

三大範式

第一範式:
表:欄位1、欄位2(欄位2.1,欄位2.2),欄位3.。。
第二範式:不符合第二範式的例子
表:學號、課程號、姓名、學分
這個表表示了兩個十五:學生資訊、課程資訊,由於非主鍵欄位必須依賴主鍵,這裏學分依賴課程號,姓名依賴學號,不符合第二範式,
第三範式:不符合第三範式的列子
表:學號、姓名、年齡、所在學院、學院聯繫電話
存在依賴傳遞學號->所在學院->學院地點、學院電話
j解決」取出重複欄位、新增學院表

表關係

表與表之間(實體)自然界都有的關係,每種關係如何設計結構
一對一:一張表的記錄和另外一張表中的關係只有一條有關係,通常涉及方法保證使用同樣的主鍵
比如學生表

sid(key) name age sex phone grade

表的使用過程中,常用的資訊去查詢,不常用的偶爾纔會用到
將表拆分,常用的資訊放在一個表內 不常用的表在一個表內
常用表

sid(key) name age sex

不常用表

sid(key) phone grade

一對多關係
通常也叫多對一,從角度去看問題,通常一對多關係設計方案,再「多」關係的表中去維護一個欄位,這個欄位是「一」關係的主鍵
比如:媽媽和兒女的關係
媽媽表

mid(key) name age sex
m1
m2

兒女表

kid(key) name age sex mid
k1 m1
k2 m2

這裏理論上是可以把兒女id加給媽媽的,但是實際是不行的

多對多
一張表的一條記錄可以匹配到另外一張表中多條記錄,多對多的關係如果按照一對一的關係維護,就會出現多個其他表的主鍵,那麼存取會不方便,通過兩張表自己增加欄位,那麼就通過第三張表來解決
比如師生關係
一個老師教過很多學生,一個學生聽過很多老師的課
實體:老師、學生
老師表

tid(key) name age sex
1 ee 30
2 ff 24

學生表

sid(key) name age sex
1 ty 16
2 qq 15

設計一張中間表來維護兩張表之間關係,每種聯繫都可以包含
中間表

id(key) sid tid
1 s1 t1
2 s2 t2

中間表滿足所有關係
多對多的解決方法:增加中間表,讓中間表與對應的其他表形成2個
多對一關係,多對一的解決方法再多表中增加一表中對應的主鍵欄位

昨日習題解答:
1:檢視原始數據庫information_schema中的表,並顯示出VIEWS表的欄位結構屬性資訊
(1) 選中目標數據庫
(2) 使用desc檢視錶格結構(也可以使用show create table 表名;)
mysql -u root -p
show databases;
use information_schema;
show tables;
desc views;
select * from views;
2:建立一個off數據庫,並建立一個students表,欄位爲id,name,age,phone,height
首先建立off數據庫
接下來建立student
3:檢視students表的表結構
4:在上題建立的students表中,隨意插入5條數據
5:查詢所有插入的數據
6.將students表名修改爲students_details
7:將students_details中height欄位刪除
8:在students_details裡新增一個新欄位,欄位名爲sex,並增加兩條數據。
9:刪除students_details表
10.刪除off數據庫
create database off;

create table students(id int, name char(5) , age int, phone int, height int);

desc students;

insert into students values(1,‘ry’,12,11020,1);
insert into students values(2,‘re’,13,11030,2);
insert into students values(3,‘rrr,14,11013,3);
insert into students values(4,rw’,15,11014,4);
insert into students values(5,‘qr’,16,11015,5);

select * from students;

rename table students to students_details;

alter table students_details drop height;

alter table students_details add sex char(2);

drop table students_details;

drop database off;

今日題庫:
1.測試整型的所有型別
2.測試float、double
3.測試定點型
4.測試字串型別
5.測試時間日期型別
6.測試列屬性
7.測試主鍵和唯一鍵
注:測試包括增刪改查,以及測試數據的最大範圍和最小範圍等等。