1. 程式人生 > 其它 >04--基本sql語句,基本資料型別 ;儲存引擎

04--基本sql語句,基本資料型別 ;儲存引擎

目錄

一、基本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','生蠔');
# 集合可以多選或者只寫一個,但是不能寫沒有例舉的