儲存引擎
日常生活中檔案格式有很多中,並且針對不同的檔案格式會有對應不同儲存方式和處理機制
針對不同的資料應該有對應的不同的處理機制來儲存
儲存引擎就是不同的處理機制
mysql主要儲存引擎
-innodb
mysql5.5版本及之後預設的儲存引擎
儲存資料更加的安全-myisam
是mysql5.5版本之前預設的儲存引擎
速度要比innodb更快 但是資料安全-memory
記憶體引擎(資料全部存放在記憶體中) 斷電資料丟失-blackhole
無論存什麼,都立刻消失(黑洞)
#檢視所有的儲存引擎
show engines;#不同的儲存引擎在儲存表的時候 異同點
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=blackhole;
create table t4(id int) engine=memory;#存資料
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
建立表的完整語法
#語法create table 表名(
欄位名1 型別(寬度) 約束條件,
欄位名2 型別(寬度) 約束條件,
欄位名3 型別(寬度) 約束條件
)#注意
1在同一張表中欄位名不能重複2寬度和約束條件是可選的而欄位名和字段型別是必須的
約束條件寫的話 也支援寫多個
欄位名1 型別(寬度) 約束條件1 約束條件2...,3最後一行不能有逗號#寬度
一般情況下指的是對儲存資料的限制
create table t7(name char); 預設寬度是1
insert into t7 values('jason');
insert into t7 values(null); 關鍵字null
針對不同的版本會出現不同的效果5.6版本預設沒有開啟嚴格模式 規定只能存乙個字元你給了多個字元,那麼我會自動幫你擷取5.7版本及以上或者開啟了嚴格模式 那麼規定只能存幾個 就不能超,一旦超出範圍立刻報錯 data too long for....
mysql5.7之後的版本預設都是開啟嚴格模式的
使用資料庫的準則:
能盡量少的讓資料庫幹活就盡量少 不要給資料庫增加額外的壓力#約束條件 null not null不能插入null
create table t8(id int,name char notnull);"""寬度和約束條件到底是什麼關係
寬度是用來限制資料的儲存
約束條件是在寬度的基礎之上增加的額外的約束
基本資料型別
整型分類
tinyint smallint meduimint int bigint
作用:儲存年齡、等級、id、號碼...
以tinyint
是否有符號
預設情況下是帶符號的
超出會如何
超出限制只存最大可接受值#約束條件之unsigned 無符號
create table t10(id tinyint unsigned);#int預設也是帶符號的#整型預設情況下都是帶有符號的
"""特例:只有整型括號裡面的數字不是表示限制位數
id int(8)
如果數字沒有超出8位 那麼預設用空格填充至8位
如果數字超出了8位 那麼有幾位就存幾位(但是還是要遵守最大範圍)"""
#用0填充至8位
create table t13(id int(8) unsigned zerofill);#總結:
針對整型字段 括號內無需指定寬度 因為它預設的寬度以及足夠顯示所有的資料了
嚴格模式
#如何檢視嚴格模式
show variables like "%mode";
模糊匹配/查詢
關鍵字 like%:匹配任意多個字元
_:匹配任意單個字元#修改嚴格模式
set session 只在當前視窗有效
setglobal全域性有效
setglobal sql_mode = 'strict_trans_tables';
修改完之後 重新進入服務端即可
浮點型分類
float、double、decimal
作用:身高、體重、薪資...
#儲存限制
float(255,30) #總共255位 小數部分佔30位
double(255,30) #總共255位 小數部分佔30位
decimal(65,30) #總共65位 小數部分佔30位
#精確度驗證
create table t15(id float(255,30));
create table t16(id double(255,30));
create table t17(id decimal(65,30));
insert into t15 values(1.111111111111111111111111111111);
insert into t16 values(1.111111111111111111111111111111);
insert into t17 values(1.111111111111111111111111111111);
得到的結果精度越來越高
float< double
字元型別
分類"""char
定長char(4) 資料超過四個字元直接報錯 不夠四個字元空格補全
varchar
變長varchar(4) 資料超過四個字元直接報錯 不夠有幾個存幾個"""
#介紹乙個小方法 char_length統計字段長度
select char_length(name) fromt18;"""首先可以肯定的是 char硬碟上存的絕對是真正的資料 帶有空格的
但是在顯示的時候mysql會自動將多餘的空格剔除"""
#再次修改sql_mode 讓mysql不要做自動剔除操作
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
char與varchar對比
"""char
缺點:浪費空間
優點:訪問都很簡單
直接按照固定的字元訪問資料即可
jason egon alex wusir tank
存按照五個字元存 取也直接按照五個字元取
varchar
優點:節省空間
缺點:訪問較為麻煩
1bytes+jason 1bytes+egon 1bytes+alex 1bytes+tank
存的時候需要製作報頭
取的時候也需要先讀取報頭 之後才能讀取真實資料"""
時間型別
分類date:年月日 2020-5-4
datetime:年月日時分秒 2020-5-4 11:11:11
time:時分秒11:11:11
year:2020
create table student(
id int,
name varchar(16),
born_year year,
birth date,
study_time time,
reg_time datetime
insert into student values(1,'egon','1880','1880-11-11','11:11:11','2020-11-11 11:11:11');
列舉與集合型別
分類"""列舉(enum) 多選一
集合(set) 多選多"""
具體使用
create table user(
id int,
name char(16),
gender enum('male','female','others')
insert into user values(1,'jason','male'); 正常
insert into user values(2,'egon','***xooo'); 報錯#列舉字段 後期在存資料的時候只能從列舉裡面選擇乙個儲存
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','dbj','hecha')
insert into teacher values(1,'jason','male','read'); 正常
insert into teacher values(2,'egon','female','dbj,hecha'); 正常
insert into teacher values(3,'tank','others','生蠔'); 報錯#集合可以只寫乙個 但是不能寫沒有列舉的
165體重 身高165標準體重是多少斤女生
每個時期,人們對於美的標準是不一樣的。比如在唐朝以胖為美,而近現代人們都是以瘦為美。但是近年來,女性對自己的身材要求變得越來越苛刻,很多女性明明已經達到了健康的體重標準,卻還是想繼續 有一些女性的 目標實在是過於瘦,簡直能夠達到一種病態的地步。那麼身高165的女性到底標準體重在多少合適呢?讓我們接下...
Python輸入身高體重並計算BMI
當前計算bmi的程式中height,weight都是固定值,請將程式更改為從鍵盤獲取輸入,再計算 bmi。先輸入身高 單位 公尺 然後輸入體重 單位 公斤 然後再計算並輸出 bmi 值。在 python 中,可以通過input 指令獲取鍵盤輸入的內容,直至遇到回車,下面的 獲取輸入,並儲存到變數na...
根據身高體重計算BMI指數
bmi指數即身體質量指數,是目前國際常用的衡量人體胖瘦程度以及是否健康的乙個標準。bmi指數計算公式如下 體質指數 bmi 體重 kg 身高2 m2 根據要求編寫程式,實現根據輸入的身高體重計算bmi值的功能。import math height float input 請輸入您的身高 cm wei...