教你怎么使用
介紹一下數據庫的一些概念
1.數據(data)是數據庫中存儲的基本對象,數據不單純指數字,廣義的理解認為數據的種類很多,例如文本(text)、圖形(graph)
2.數據庫 (DB),顧名思義,是存放數據的倉庫。嚴格來講,數據庫是長期存放在計算機內、有組織的、可共享的大量數據的集合
3.數據庫管理系統 (DBMS)sql語言和數據庫有什么關系sql語言和數據庫有什么關系,是位于用戶與操作系統之間的一層數據管理軟件。數據庫管理系統和操作系統一樣是計算機的基礎軟件,也是一個大型復雜的軟件系統。
SQL的定義
SQL:操作關系型數據庫的編程語言,定義了一套操作關系型數據庫的統一標準。
和Mysql :
簡單介紹一下 和Mysql :
大型收費數據庫
Mysql 開源免費中小型
還有一款微軟開發的 SQL 中型的收費數據庫
Mysql數據庫的優點:開源 跨平臺 易上手
什么是關系型數據庫?
關系型數據庫(RDBMS)是建立在關系模型的基礎上,由多張相互連接的二維表組成的數據庫。
Mysql的啟動與停止
第一種方式:cmd命令行中輸入.msc 打開本地服務 ,找到打開即可;
第二種方式:用系統命令行工具 輸入net start 開始服務
net stop 停止服務
當我們的電腦中安裝了mysql服務器并打開了服務以后,我們的主機就相當于服務器端,我們要用客戶端來連接服務端操作數據庫;
客戶端的鏈接 1.用客戶端工具鏈接
2.用系統命令行鏈接
命令:mysql [127.0.0.1] [-p 3306] -u root -p
然后輸入密碼(是你安裝mysql時設置的)
圖形化工具的使用
(我只用過常見的這兩種)
和
可以試用一段時間 ,就收費了 后面我會上傳資源!
介紹完了數據庫的基本知識和圖形化界面 讓我們來看一下重點SQL語法把!
SQL SQL語法
SQL的語法很簡單:可以單行,也可以多行,分號結尾!
可以用空格、TAB縮進
不區分大小寫,建議關鍵字大寫!
SQL分類
通用語法及分類
DDL: 數據定義語言,用來定義數據庫對象(數據庫、表、字段)
DML: 數據操作語言,用來對數據庫表中的數據進行增刪改
DQL: 數據查詢語言,用來查詢數據庫中表的記錄
DCL: 數據控制語言,用來創建數據庫用戶、控制數據庫的控制權限
DDL(數據定義語言)
查詢所有數據庫:
SHOW DATABASES;
查詢當前數據庫:
SELECT DATABASE();
創建數據庫:
CREATE DATABASE [ IF NOT EXISTS ] 數據庫名 [ DEFAULT CHARSET 字符集] [COLLATE 排序規則 ];
刪除數據庫:
DROP DATABASE [ IF EXISTS ] 數據庫名;
使用數據庫:
USE 數據庫名;

注意事項
UTF8字符集長度為3字節,有些符號占4字節,所以推薦用utf8mb4字符集
對表操作:
查詢當前數據庫所有表:
SHOW TABLES;
查詢表結構:
DESC 表名;
查詢指定表的建表語句:
SHOW CREATE TABLE 表名;
創建表:
CREATE TABLE 表名(
字段1 字段1類型 [COMMENT 字段1注釋],
字段2 字段2類型 [COMMENT 字段2注釋],
字段3 字段3類型 [COMMENT 字段3注釋],
...
字段n 字段n類型 [COMMENT 字段n注釋]
)[ COMMENT 表注釋 ];
*最后一個字段后面沒有逗號*!!!
添加字段:
ALTER TABLE 表名 ADD 字段名 類型(長度) [COMMENT 注釋] [約束];
例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵稱';
修改數據類型:
ALTER TABLE 表名 MODIFY 字段名 新數據類型(長度);
修改字段名和字段類型:
ALTER TABLE 表名 CHANGE 舊字段名 新字段名 類型(長度) [COMMENT 注釋] [約束];
例:將emp表的nickname字段修改為username,類型為varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵稱';
刪除字段:
ALTER TABLE 表名 DROP 字段名;
修改表名:
ALTER TABLE 表名 RENAME TO 新表名
刪除表:
DROP TABLE [IF EXISTS] 表名;
刪除表,并重新創建該表:
TRUNCATE TABLE 表名;
DML(數據操作語言)增刪改
添加數據
指定字段:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
全部字段:
INSERT INTO 表名 VALUES (值1, 值2, ...);

批量添加數據:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
注意事項
**字符串和日期類型數據應該包含在引號中
插入的數據大小應該在字段的規定范圍內**
更新和刪除數據
修改數據:
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 條件 ];
例:
UPDATE emp SET name = 'Jack' WHERE id = 1;
刪除數據:
DELETE FROM 表名 [ WHERE 條件 ];
DQL(數據查詢語言) 查!
語法:(先后順序)
SELECT
字段列表
FROM
表名字段
WHERE
條件列表
GROUP BY
分組字段列表
HAVING
分組后的條件列表
ORDER BY
排序字段列表
LIMIT
分頁參數
1.基礎查詢
查詢多個字段:
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;
設置別名: as
SELECT 字段1 [ AS 別名1 ], 字段2 [ AS 別名2 ], 字段3 [ AS 別名3 ], ... FROM 表名;
SELECT 字段1 [ 別名1 ], 字段2 [ 別名2 ], 字段3 [ 別名3 ], ... FROM 表名;
去除重復記錄: distinct
SELECT DISTINCT 字段列表 FROM 表名;
轉義:
SELECT * FROM 表名 WHERE name LIKE '/_張三' ESCAPE '/'
/ 之后的_不作為通配符
2.條件查詢
語法:
SELECT 字段列表 FROM 表名 WHERE 條件列表;

條件:
比較運算符 功能
**> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
BETWEEN … AND … 在某個范圍內(含最小、最大值)
IN(…) 在in之后的列表中的值,多選一
LIKE 占位符 模糊匹配(_匹配單個字符,%匹配任意個字符)
IS NULL 是NULL
邏輯運算符 功能
AND 或 && 并且(多個條件同時成立)
OR 或 || 或者(多個條件任意一個成立)
NOT 或 ! 非,不是**
例子:
-- 年齡等于30
select * from employee where age = 30;
-- 有身份證
select * from employee where idcard;
select * from employee where idcard is not null;
-- 不等于
select * from employee where age != 30;
-- 年齡在20到30之間
select * from employee where age between 20 and 30;
select * from employee where age >= 20 and age <= 30;
-- 姓名為兩個字
select * from employee where name like '__';
-- 身份證最后為X
select * from employee where idcard like '%X';
3.聚合查詢(聚合函數)
常見聚合函數:
函數 功能
**count 統計數量
max 最大值
min 最小值
avg 平均值
sum 求和**
語法:
SELECT 聚合函數(字段列表) FROM 表名;
例:
SELECT count(id) from employee where workaddress = "廣東省";
4.分組查詢
語法:
SELECT 字段列表 FROM 表名 [ WHERE 條件 ] GROUP BY 分組字段名 [ HAVING 分組后的過濾條件 ];

5.**where 和 having 的區別:
執行時機不同:where是分組之前進行過濾,不滿足where條件不參與分組;having是分組后對結果進行過濾。
判斷條件不同:where不能對聚合函數進行判斷,而having可以。
例子:
-- 根據性別分組,統計男性和女性數量(只顯示分組數量,不顯示哪個是男哪個是女)
select count(*) from employee group by gender;
-- 根據性別分組,統計男性和女性數量
select gender, count(*) from employee group by gender;
-- 根據性別分組,統計男性和女性的平均年齡
select gender, avg(age) from employee group by gender;
-- 年齡小于45,并根據工作地址分組
select workaddress, count(*) from employee where age < 45 group by workaddress;
-- 年齡小于45,并根據工作地址分組,獲取員工數量大于等于3的工作地址
select workaddress, count(*) address_count from employee where age < 45 group by workaddress having address_count >= 3;
注意事項
6.執行順序:where > 聚合函數 > having
分組之后,查詢的字段一般為聚合函數和分組字段,查詢其他字段無任何意義
7.排序查詢
語法:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
8.排序方式:
ASC: 升序(默認)
DESC: 降序
例子:
-- 根據年齡升序排序
SELECT * FROM employee ORDER BY age ASC;
SELECT * FROM employee ORDER BY age;
-- 兩字段排序,根據年齡升序排序,入職時間降序排序
SELECT * FROM employee ORDER BY age ASC, entrydate DESC;
注意事項
如果是多字段排序,當第一個字段值相同時,才會根據第二個字段進行排序
9.分頁查詢
語法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查詢記錄數;
例子:
-- 查詢第一頁數據,展示10條
SELECT * FROM employee LIMIT 0, 10;
-- 查詢第二頁
SELECT * FROM employee LIMIT 10, 10;
注意事項
起始索引從0開始,起始索引 = (查詢頁碼 - 1) * 每頁顯示記錄數
分頁查詢是數據庫的方言,不同數據庫有不同實現,MySQL是LIMIT
如果查詢的是第一頁數據,起始索引可以省略,直接簡寫 LIMIT 10
DQL執行順序
FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
DCL(用戶管理語言)
管理用戶新建用戶對用戶賦予權限等
查詢用戶:
我們用戶信息都存mysql數據庫中的user表中 ,我們操作user表就可以了。
USE mysql;
SELECT * FROM user;
創建用戶:
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';
修改用戶密碼:
ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼';
刪除用戶:
DROP USER '用戶名'@'主機名';
例子:
-- 創建用戶test,只能在當前主機localhost訪問
create user 'test'@'localhost' identified by '123456';
-- 創建用戶test,能在任意主機訪問
create user 'test'@'%' identified by '123456';
create user 'test' identified by '123456';
-- 修改密碼
alter user 'test'@'localhost' identified with mysql_native_password by '1234';
-- 刪除用戶
drop user 'test'@'localhost';
**注意事項
主機名可以使用 % 通配
權限控制
常用權限:
權限 說明
ALL, ALL PRIVILEGES 所有權限
SELECT 查詢數據
INSERT 插入數據
UPDATE 修改數據
DELETE 刪除數據
ALTER 修改表
DROP 刪除數據庫/表/視圖
CREATE 創建數據庫/表
更多權限請看權限一覽表
查詢權限:
SHOW GRANTS FOR '用戶名'@'主機名';
授予權限:
GRANT 權限列表 ON 數據庫名.表名 TO '用戶名'@'主機名';
撤銷權限:
REVOKE 權限列表 ON 數據庫名.表名 FROM '用戶名'@'主機名';
注意事項
多個權限用逗號分隔
授權時,數據庫名和表名可以用 * 進行通配,代表所有
我們先介紹日常開發中一些基本的語句,下期介紹sql的一些函數和約束等。