天天看點

大資料學習之路——MySQL基礎(一)——MySQL的基礎知識與常見操作

一、存儲引擎

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;