04--基本sql語句,基本資料型別 ;儲存引擎
阿新 • • 發佈:2021-07-01
目錄
一、基本sql語句
1.庫的基本操作
#庫->資料夾 增 create database db1 charset utf8mb4; 改 alter database db1 charset gbk; 查 show databases; show create database db1; 刪 drop database db1;
2.表的基本操作
#表->檔案
create database db1;
use db1;
增 create table t1(id int,name varchar(16));
改 alter table t1 modify name varchar(20);
查 show tables;
desc t1;
show create table t1;
刪 drop table t1;
# 語法 create table 表名( 欄位1 型別(寬度)約束條件, 欄位2 型別(寬度)約束條件, ) # 注意 1,同一張表中欄位名不能重複 2,寬度和約束條件是可選的(可寫可不寫)而欄位名和欄位型別是必須的 約束條件寫的話,也支援寫多個 欄位名1 型別(寬度) 約束條件1 約束條件2.。。。 create table t5(id); 報錯 3,最後一行不能有逗號 補充: # 寬度 一般情況下指的是對儲存資料的限制 create table t7(name char); 預設寬度是1 insert into t7 values('egon'); 針對不同版本會出現不同的效果 5.6版本預設沒有開啟嚴格模式 規定只能存一個字元你給了多個字元,那麼我會自動幫你擷取 5.7版本及以上或者開啟了嚴格模式 那麼規定只能存幾個,就不能超,一旦超出範圍立刻報錯Data too long for... # 約束條件 null not null不能插入null create table t8(id int,name char not null); 寬度和約束條件到底是什麼關係? 寬度是用來限制資料的儲存 約束條件是在寬度的基礎上增加的額外的約束
3.記錄的基本操作
#記錄 ->檔案中的一行內容 create database db1; use db1; create table t1(id int,name varchar(16)); 增 insert db1.t1 values(1,"egon"),(2,"tom"),(3,"jack"); insert db1.t1(name,id) values("lili",4); insert db1.t1(id) values(5); 改 update db1.t1 set name="JACK" where id=3; 查 select * from db1.t1; select id,name from db1.t1; select id,name from db1.t1 where id=3; select id,name from db1.t1 where id<3; 刪 delete from db1.t1 where id=3; 清空表 delete from db1.t1; -- 不要這麼做 truncate db1.t1; --ok
二、儲存引擎
日常生活中檔案格式有很多種,並且針對不同的檔案格式會有對應不同儲存方式和處理機制(txt,pdf, word, mp4...)
針對不同的資料應該有對應的不同的處理機制來儲存
儲存引擎就是不同的處理機制
mysql主要儲存引擎
1, innodb
是mysql5.5版本及之後預設的儲存引擎
2, myisam
是mysql5.5版本之前預設的儲存引擎
速度要比innodb更快,但是我們更加註重的是資料的安全
3, memory
記憶體引擎(資料全部存放在記憶體中)斷電資料丟失
4, blackhole
無論存什麼,都立刻消失(黑洞)
# 檢視所有的儲存引擎
show engines;
# 不同的儲存引擎
create table t1(id int) engines=innodb;
# 存資料
insert into t1 values(1);
三、基本資料型別
整型
--分類
tinyint , smallint ,meduimint , int , bagint
--作用
儲存年齡,等級,id,號碼等
以tinyint
是否有符號,預設情況下帶著符號
超出會如何,超出限制只存最大可接收值
create table t9(id tinyint);
insert t9 values(-129),(256);
約束條件之unsigned 無符號
create table t10(id tinyint unsigned);
create table t11(id int);
# int預設也是帶符號 ,整型預設情況下都是帶有符號的
針對整型,括號內的寬度到底是幹嘛的
create table t12(id int(8));
insert t12 values(123456789);
特例:只有整型括號裡面的數字不是表示限制位數
id int(8)
如果數字沒有超出8位,那麼預設用空格填充8位
如果超過8位,那麼有幾位就存幾位(但還是要遵守最大範圍)
create table t13(id int(8) unsigned zerofill);
# 用0填充至8位
# 總結 : 針對整型欄位,括號內無需指定寬度,因為它預設的寬度以及足夠顯示所有的資料了
嚴格模式
# 如何檢視嚴格模式
show variables like "%mode";
模糊匹配/查詢
關鍵字 like
% :匹配任意多個字元 _ :匹配任意單個字元
# 修改嚴格模式
set session 只在當前視窗有效
set global 全域性有效
set global 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(float(255,30));
create table t16(double(255,30));
create table t17(decimal(65,30)); # 最精準
float < double <decimal
# 要結合實際應用場景 三者都能使用
字元型別
分類
char 定長
char(4) 資料超過4個字元直接報錯,不夠4個字元空格補全
varchar 變長
varchar(4) 資料超過4個字元直接報錯,不夠有幾個存幾個
# char_length 統計欄位長度
首先肯定的是,char 硬碟上存的絕對是真正的資料,帶有空格的
但是在顯示的時候mysql會自動將多餘的空格剔除
# 再次修改sql_mode 讓mysql不要做自動剔除操作
set global sql_mode = 'SIRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
char 與 varchar 對比
char
缺點:浪費空間
優點:存取都很簡單,直接安裝固定的字元存取資料即可
jason egon alex wusir tank
存按照5個字元存,取也直接按照5個字元取
varchar
優點:節省空間
缺點:存取較為麻煩
1bytes+jason 1bytes+egon 1bytes+alex 1bytes+wusir 1bytes+tank
存的時候需要製作報頭,取的時候也需先在讀取報頭,之後才讀取真實資料
以前基本上都是用char ,其現在用varchar多一些,建議使用varchar
時間型別
分類
date : 年月日
datetime: 年月日時分秒
time: 時分秒
year:年
create table student(id int,name varchar(16),born_year year,birth date,study_time time,reg_time datetime);
insert student values(1,'dandan','1993','1993-09-20','11:11:11','2020-12-01 11:11:11');
列舉與集合型別
分類
列舉(enum) 多選一
集合(set) 多選多
具體使用
create table user(id int,name char(16),gender enum('male','female','others'));
insert user values(1,'lili','female'); # 正常
insert user values(2,'egon','mm'); #報錯
# 列舉欄位 後期存資料的時候只能從列舉裡面選擇一個儲存
create table teacher(id int,name char(16),gender enum('male','female','others'),hobby set('read','music','hecha') );
insert teacher values(1,'jason','male','read');
insert teacher values(2,'egon','female','生蠔');
# 集合可以多選或者只寫一個,但是不能寫沒有例舉的