目錄
概述
數據庫的基本概念
1. 數據庫的英文單詞: DataBase 簡稱 : DB
2. 什麼數據庫:用於存儲和管理數據的倉庫。
3. 數據庫的特點:
1. 持久化存儲數據的。其實數據庫就是一個文件系統
2. 方便存儲和管理數據
3. 使用了統一的方式操作數據庫 -- SQL
4. 常見的數據庫軟件
- MySQL:開源免費的數據庫,小型的數據庫,已經被Oracle收購了。MySQL6.x版本也開始收費。後來Sun公司收購了MySQL,而Sun公司又被Oracle收購
- Oracle:收費的大型數據庫,Oracle公司的產品。
- DB2 :IBM公司的數據庫產品,收費的。常應用在銀行系統中。
- SQL Server:MicroSoft 公司收費的中型的數據庫。C#、.net等語言常使用。
- SQLite: 嵌入式的小型數據庫,應用在手機端,如:Android。
MySQL數據庫軟件
1. 安裝
參見《MySQL基礎.pdf》
2. 卸載
1. 去mysql的安裝目錄找到my.ini文件
複製 datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
2. 通過卸載程序,卸載MySQL
3. 刪除C:/ProgramData目錄下的MySQL文件夾。
3. 配置
MySQL服務啓動
方式一:到window的服務管理器, 手動開啓和關閉MySQL服務。
方式二:cmd--> services.msc 打開服務的窗口
方式三:使用管理員打開cmd
net start mysql : 啓動mysql的服務
net stop mysql : 關閉mysql服務
MySQL登錄
- mysql -u用戶名 -p密碼 eg:mysql -uadmin -padmin
- mysql -hip -u用戶名 -p密碼 eg: mysql -h192.168.1.3 -uadmin -padmin
- mysql --host=ip --user=用戶名 --password=密碼 eg: mysql --host=192.168.1.3 --user=admin --password=admin
MySQL退出
- exit
- quit
MySQL目錄結構
1. MySQL安裝目錄:basedir="D:/develop/MySQL/"
配置文件 my.ini
2. MySQL數據目錄:datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
幾個概念:
數據庫:文件夾,在C:/ProgramData/MySQL/MySQL Server 5.5/Data/裏的每個目錄表示一個數據庫
表:文件,數據庫目錄裏面的文件
數據:數據,文件裏面存儲的數據
SQL
1.什麼是SQL?
Structured Query Language:結構化查詢語言
其實就是定義了操作所有關係型數據庫的規則。每一種數據庫操作的方式存在不一樣的地方,稱爲“方言”。
2.SQL通用語法
- SQL 語句可以單行或多行書寫,以分號結尾。
- 可使用空格和縮進來增強語句的可讀性。
- MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
- 3種註釋 單行註釋: -- 註釋內容 或 # 註釋內容(mysql 特有) 多行註釋: /* 註釋 */
3. SQL分類
- DDL(Data Definition Language)數據定義語言:用來定義數據庫對象:數據庫,表,列等。關鍵字:create, drop,alter 等
- DML(Data Manipulation Language)數據操作語言:用來對數據庫中表的數據進行增刪改。關鍵字:insert, delete, update 等
- DQL(Data Query Language)數據查詢語言:用來查詢數據庫中表的記錄(數據)。關鍵字:select, where 等
- DCL(Data Control Language)數據控制語言:用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:GRANT, REVOKE 等
DDL:操作數據庫、表
CRUD : C(Create) R(Retrieve) U(Update) D(Delete)
操作數據庫
C(Create):創建
- 創建數據庫:create database 數據庫名稱;
- 創建數據庫,判斷不存在,再創建:create database if not exists 數據庫名稱;
- 創建數據庫,並指定字符集 : create database 數據庫名稱 character set 字符集名;
eg:
create database if not exists demoDB character set utf8;
R(Retrieve):查詢
查詢所有數據庫的名稱: show databases;
查詢某個數據庫的字符集,查詢某個數據庫的創建語句 : show create database 數據庫名稱;
U(Update):修改
修改數據庫的字符集 : alter database 數據庫名稱 character set 字符集名稱;
D(Delete) : 刪除
刪除數據庫 : drop database 數據庫名稱;
判斷數據庫存在,存在再刪除 : drop database if exists 數據庫名稱;
使用數據庫
查詢當前正在使用的數據庫名稱 : select database();
使用數據庫 : use 數據庫名稱;
操作表
C(Create):創建表
語法:
create table 表名(
列名1 數據類型1,
列名2 數據類型2,
....
列名n 數據類型n
);
注意:最後一列,不需要加逗號(,)
常用數據類型:
1. int:整數類型
age int,
2. double:小數類型
score double(5,2)
3. date:日期,只包含年月日,yyyy-MM-dd
4. datetime:日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:時間錯類型 包含年月日時分秒 yyyy-MM-dd HH:mm:ss
如果將來不給這個字段賦值,或賦值爲null,則默認使用當前的系統時間,來自動賦值
6. varchar:字符串
name varchar(20):姓名最大20個字符
zhangsan 8個字符 張三 2個字符
eg:
創建表
create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);
複製表:create table 表名 like 被複制的表名;
R(Retrieve):查詢
查詢某個數據庫中所有的表名稱 : show tables;
查詢表結構 :desc 表名;
U(Update):修改
1. 修改表名 : alter table 表名 rename to 新的表名;
2. 修改表的字符集 :alter table 表名 character set 字符集名稱;
3. 添加一列 : alter table 表名 add 列名 數據類型;
4. 修改列名稱 類型:
alter table 表名 change 列名 新列別 新數據類型;
alter table 表名 modify 列名 新數據類型;
5. 刪除列 :alter table 表名 drop 列名;
D(Delete):刪除表
drop table 表名;
drop table if exists 表名 ;
客戶端圖形化工具:SQLYog
https://www.onlinedown.net/soft/24926.htm
DML:增刪改表中數據
向表中添加數據:insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
注意:
1. 列名和值要一一對應。
2. 如果表名後,不定義列名,則默認給所有列添加值 : insert into 表名 values(值1,值2,...值n);
3. 除了數字類型,其他類型需要使用引號(單雙都可以)引起來
刪除數據:delete from 表名 [where 條件]
注意:
1. 如果不加條件,則刪除表中所有記錄。
2. 如果要刪除所有記錄
1. delete from 表名; -- 不推薦使用。有多少條記錄就會執行多少次刪除操作
2. TRUNCATE TABLE 表名; -- 推薦使用,效率更高 先刪除表,然後再創建一張一樣的表。
修改數據:update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
注意:如果不加任何條件,則會將表中所有記錄全部修改。
DQL:查詢表中的記錄
查詢語句格式:select * from 表名;
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之後的條件
order by
排序
limit
分頁限定
基礎查詢
有如下student表:
1. 多個字段的查詢 :select 字段名1,字段名2... from 表名;
注意:如果查詢所有字段,則可以使用*來替代字段列表。
2. 去除重複:distinct select distinct name from student; --查詢student表列出所有學生的名字,並去除重複
3. 計算列
一般可以使用四則運算計算一些列的值。(一般只會進行數值型的計算)
ifnull(表達式1,表達式2):null參與的運算,計算結果都爲null,所以通過ifnull函數進行判斷
表達式1:哪個字段需要判斷是否爲null
表達式2:如果該字段爲null後的替換值
4. 起別名:
as:as也可以省略
條件查詢
1. where子句後跟條件
2. 運算符
> 、< 、<= 、>= 、= 、<>
BETWEEN...AND
IN( 集合)
LIKE:模糊查詢
佔位符:
_ : 單個任意字符
%:多個任意字符
IS NULL
and 或 &&
or 或 ||
not 或 !
-- 查詢年齡大於20歲
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE age >= 20;
-- 查詢年齡等於20歲
SELECT * FROM student WHERE age = 20;
-- 查詢年齡不等於20歲
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
-- 查詢年齡大於等於20 小於等於30
SELECT * FROM student WHERE age >= 20 && age <=30;
SELECT * FROM student WHERE age >= 20 AND age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查詢年齡22歲,18歲,25歲的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);
-- 查詢英語成績爲null
SELECT * FROM student WHERE english = NULL; -- 不對的。null值不能使用 = (!=) 判斷
SELECT * FROM student WHERE english IS NULL;
-- 查詢英語成績不爲null
SELECT * FROM student WHERE english IS NOT NULL;
-- 查詢姓馬的有哪些? like
SELECT * FROM student WHERE NAME LIKE '馬%';
-- 查詢姓名第二個字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";
-- 查詢姓名是3個字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查詢姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
排序查詢
語法:order by 子句
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
排序方式:
ASC:升序,默認的。
DESC:降序。
注意:如果有多個排序條件,則當前邊的條件值一樣時,纔會判斷第二條件。
-- 查詢所有數據,使用年齡降序排序
select * from student order by age desc;
-- 查詢所有數據,在年齡降序排序的基礎上,如果年齡相同再以數學成績升序排序
select * from student order by age desc, math asc;
聚合函數,分組查詢:
GROUP BY :將一列數據作爲一個整體,進行縱向的計算。將分組字段結果中相同內容作爲一組,並且返回每組的第一條數據,所以單獨分組沒什麼用處。分組的目的就是爲了統計,一般分組會跟聚合函數一起使用。
1. count:計算個數
1. 一般選擇非空的列:主鍵
2. count(*)
2. max:計算最大值
3. min:計算最小值
4. sum:計算和
5. avg:計算平均值
注意:聚合函數的計算,排除null值。
解決方案:
1. 選擇不包含非空的列進行計算
2. IFNULL函數
分組查詢:
注意:
1. 分組之後查詢的字段:分組字段、聚合函數
2. where 和 having 的區別?
- where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
- where 後不可以跟聚合函數,having可以進行聚合函數的判斷。
-- 按照性別分組。分別查詢男、女同學的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
-- 按照性別分組。分別查詢男、女同學的平均分,人數,1)查詢所有數據,按性別分組。 2)統計每組人數
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
-- 按照性別分組。分別查詢男、女同學的平均分,人數 要求:分數低於70分的人,不參與分組
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
-- 按照性別分組。分別查詢男、女同學的平均分,人數 要求:分數低於70分的人,不參與分組,分組之後。人數要大於2個人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人數 FROM student WHERE math > 70 GROUP BY sex HAVING 人數 > 2;
分頁查詢
語法:limit 開始的索引,每頁查詢的條數;
公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
limit 是一個MySQL"方言",其他數據庫有自己的分頁語法
-- 每頁顯示3條記錄
SELECT * FROM student LIMIT 0,3; -- 第1頁
SELECT * FROM student LIMIT 3,3; -- 第2頁
SELECT * FROM student LIMIT 6,3; -- 第3頁
--如果你只想查所有數據的前多少條
SELECT * FROM student LIMIT 3;
感謝關注
加油啊!
mysql 數據類型分類
分類 |
類型名稱 |
類型說明 |
tinyInt |
微整型:很小的整數(佔8位二進制) |
|
smallint |
小整型:小的整數(佔16位二進制) |
|
mediumint |
中整型:中等長度的整數(佔24位二進制) |
|
int(integer) |
整型:整數類型(佔32位二進制) |
|
整數 |
||
float |
單精度浮點數,佔4個字節 |
|
小數 |
double |
雙精度浮點數,佔8個字節 |
time |
表示時間類型 |
|
date |
表示日期類型 |
|
日期 |
datetime |
同時可以表示日期和時間類型 |
char(m) |
固定長度的字符串,無論使用幾個字符都佔滿全部,M爲0~255之間的整數 |
|
字符串 |
varchar(m) |
可變長度的字符串,使用幾個字符就佔用幾個,M爲0~65535之間的整數 |
tinyblob Big Large Object |
允許長度0~255字節 |
|
blob |
允許長度0~65535字節 |
|
mediumblob |
允許長度0~167772150字節 |
|
大二進制 |
longblob |
允許長度0~4294967295字節 |
大文本 |
tinytext |
允許長度0~255字節 |