一、存儲引擎
1.含義
存儲引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進行建立、查詢、更新和删除資料。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水準等功能,使用不同的存儲引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。MySQL的核心就是存儲引擎。
2.常用存儲引擎
(1)InnoDB(MySQL5.1版本之後的版本預設的是InnoDB):優勢在于提供了良好的事務處理,崩潰修複能力和并發控制,缺點是讀寫效率較差,占用資料空間較大。
1.事務處理、復原、崩潰修複能力和多版本并發控制
2.自增長(可以思考索引的資料結構)
3.外鍵(多張表之間的關聯,如主表和從表)
(2)MyISAM(MySQL5.1版本之前預設):優勢在于占用空間小,處理速度快,缺點是不支援事物完整性和并發性
(3)Memory:資料全部放在記憶體中,采用哈希索引;但如果記憶體出現異常就會影響資料,重新開機或關機所有資料都會消失,是以其生命周期很短,一般是一次性的。
二、資料類型
主要為數值型、字元串、和日期時間類型
(1)數值型:
整數型:
int:正常大小的整數,可以帶正負号,範圍為-2147483648-2147483647;約-21億到+21億
tinyint(非常小的整數,可以帶正負号,範圍為-128-127;不帶符号的話為0-255),
bigint(非常大的整數,可以帶正負号)
小數型:
float(m,d):m參數為顯示長度,d參數為小數位數,預設為10,2
double(m,d):m參數為顯示長度,d參數為小數位數,預設為16,4。雙精度浮點小數(比float範圍更廣);
(2)字元串類型:
普通類型:
char(m):m表示字元串的固定長度:例如:sex char(1) , 表示的是性别這列的字元串隻能為1個,如男/女
varchar(m):m表示字元串的可變長度,例如:cname varchar(5), 表示的則是cname列的字元串的長度最長不能超過5
###注意:
char:如果固定長度為5,但是隻輸入了一個字元,會浪費空間,整體比對時查詢效率高。适合于有固定長度的字元串
vchar:可以節省空間,但是逐個字元比對,查詢效率較低。是以适合在一定範圍内有變化長度的字元串。
可變類型:字段的最大長度約為6萬5千
text:存儲較大的文本資料。
blob:用來存儲較大的二進制資料,例如圖像等資料,不用指定長度或大小
###兩者的差別:在排序或比較上存儲的資料時,blob大小寫敏感,而text不用區分大小寫。
特俗類型:set,enmu
(3)日期和時間類型:
date:日期 yyyy-mm--dd 如:2021-01-01;
datetime:具體時間 yyyyy-mm-dd hh:mm:ss 如:2021-01-01 12:00:00
timestamp:時間戳 yyyymmddhhmmss 如: 20210101120000
year(m): m表示顯示長度,預設為4,
三、常見的資料操作方式:
(1)CRUD:增删改查
C:create
R:retrieve --擷取/查詢
U:update
D:delete
(2)按照功能分類:
建立資料庫——建立表——插入資料/更新資料/删除資料
下面的幾類SQL語句就是幫組我們完成上面個的流程
DDL:(data definition languate:資料定語言)
建立庫
建立表
修改表結構
DML:(data Manipulation languate:資料操縱言)
DQL:(data Query languate:資料查詢言)
DCL:(data Controll languate:資料控制言)
四、SQL語句操作
1.SQL通用文法:
(1)SQL可以單行或者多行書寫,以分号結尾(Sqlyog中可以不用寫分号);
(2)可以使用空格和縮進來增加語句的可讀性
(3)MySQL中不區分大小寫,一般是關鍵字大寫,資料庫名、表名、列名小寫。有代碼美化功能
2.注釋方式
(1)單行注釋:
--注釋内容
或者: #注釋内容 (#為MySQL資料庫中特有的單行注釋方式)
(2)多行注釋:
/*
注釋内容
*/
3.對資料庫的常見操作
(1)建立資料庫
create database 資料庫名稱;
create database 資料庫名稱 character set utf8; (大寫的字元雖然運作稍微快一點,但小寫清晰。)
(2)切換資料庫:
use 資料庫名稱;
(3)檢視目前所使用的資料庫
select database();
檢視mysql中所有的資料庫
show databases;
檢視資料庫定義資訊(建立時的資訊)
show create database 資料庫名稱;
(4)删除資料庫和表
drop database 資料庫名稱;
(5)修改資料庫
alter databse 資料庫名稱 character set utf8;
4.對表的常見操作
一個資料庫中可以有多個表,表中又有字段,在建表的時候需要定義好字段(指定字段屬性——字段類型+字段長度)
(1)建立表:
create table 表名(
字段名稱1 字段類型(長度),
字段名稱1 字段類型(長度) 注意最後一列不要加逗号
);
快速建立一個類似表(隻複制表結構:字段,結構一樣)
cteate table 新表名 like 舊表名;
(2)删除表
drop table 表名稱;
drop table if exists 表名稱;
(3)檢視表結構
desc 表名稱;
(4)修改表:
修改表名:
rename table 舊表名 to 新表名
添加字段:
alter table 表名 add 字段名稱 字段類型(長度)
修改字段類型或長度
alter table 表名 modify 字段名稱 字段類型(長度)
修改字段名稱及類型
alter table 表名 change 舊字段名稱 新字段名稱 新字段類型(長度)
删除字段
alter table 表名 drop 字段名稱;
5.DML進行資料的增删改操作
(1)插入資料
insert into 表名(字段名1,字段名2...) values(字段值1,字段值2...);
<1>插入部分字段需要加字段名,且值得部分按照字段名得順序(對應);
<2>插入全部字段時,可以不用寫字段名
(2)修改資料:
update 表名 set 字段1(列)=‘修改後的資料’ where 字段二(定位到具體行)=‘’
update 表名 set 字段1(列)=‘修改後的資料’ (将這一列全部進行修改)
(3)删除資料
delete from 表名 (删除整個表格,效率較低)
delete from 表名 where 字段名 =(<,>) 條件
truncate table 表名 當一個表中條數較多,又要做删除動作時delete會比較慢,可以選擇這個方法。
6.DQL查詢語句
select *(表示所有字段) from 表名;
select 字段名 from 表名;
select 字段名1 as 指定别名1,字段名2 as 指定别名2 from 表名;(as可以省略)
去重操作
select distinct 字段名 from 表名
select 字段名*2 from 表名 (對字段直接進行操作)
條件查詢
select 字段名 from 表名 where 條件表達式
先取出表中的每條資料,滿足條件的傳回,不滿足的就過濾掉。
7.運算符:
(1)邏輯運算符:
and: 同時成立
or: 成立一個即可
not: 不成立
(2)通配符:
%:代表所有字元
-:代表一個字元
select * from mytable where ename like \'%張%\';
select * from mytable where ename like \'-張%\'; 表示第二個字為張的
(3)比較運算符:
大于、小于、等于、大于等于等。其中不等于為:!= 或則可以寫<>
beteween A and B :在A和B之間
in(集合):隻要判定在裡面就會顯示
is null: 查詢某一列為null
like \'%張%\':模糊查詢
例如:
where age>=18;
where age between 18 and 30;
where name in(\'張三\',\'李四\')
where name like \'%王%\' name中有王這個字
where name like \'王%\' name中有王字開頭
where name like \'%王\' name中有王字結尾
where name is nul;
where name is not nul; 不是空值
例如:
select * from mytable m where m.age>=18;