全網最實用—30分鐘快速掌握Mysql數據庫

MySQL教程

0.數據庫概念

0.1 數據的概念

數據(Data)概念:數據是對客觀事物的符號表示,如圖形符號、數字、字母等,數據是存儲的基本對象。數據的種類分爲:文字、圖形、圖象、聲音。

0.2 數據庫概念

數據庫(Database,簡稱DB)的定義:“按照數據結構來組織、存儲和管理數據的倉庫”。數據庫主要分爲純文本數據庫,關係型數據庫與非關係型數據庫。

  • 純文本數據庫:適用於小型應用,只能順序訪問,不能隨機訪問。如:txt等文本
  • 關係型數據庫:簡單易用,容易維護,支持SQL,可用於複雜查詢。 如:mysql,oracle,sqlLite
  • 非關係型數據庫:無需經過sql層解析,讀寫性能高,基於鍵值對,沒有耦合性,容易擴展。如:Mongodb,redis,Hbase

0.3 SQL概念

SQL是結構化查詢語言(Structured Query Language)簡稱,結構化查詢語言是一種數據庫查詢和程序設計語言,SQL語句對數據庫進行操作的一種語言。

在數據庫中,通過SQL命令進行操作,這些常用的命令主要包括以下幾類:DDL,DML,DCL,TCL。

1.數據庫定義語句(DDL)

DDL(Data Definition Language)數據庫定義語言:CREATE、DROP、ALTER等

1.1 創建語法: create

創建數據庫:create database [數據庫名];
創建表:create table [表名](…);

create table t_user(
  id int PRIMARY key auto_increment,
  user_name varchar(50),
  pass_word varchar(50),
  sex char(1)
);

在這裏插入圖片描述

1.2 修改語法:alter

改表名:alter table t_user rename t_student;
增加列:alter table t_student add column birthday datetime default now();
刪除列:alter table t_student drop column birthday;

1.3 刪除語法 : drop

刪除數據庫:drop database [數據庫名]
刪除表:drop table [表名]

2.數據庫操作語言(DML)

2.1 新增(INSERT)

新增單行:

insert into [表名](1,2,...);

新增多行:

insert into [表名](column1,column2)values(value1,value2),(value1,value2);

2.2 修改(UPDATE)

語法:

UPDATE 表名稱 SET 列名=值,列名=[where 列名=]

在這裏插入圖片描述

2.3 刪除(DELETE)

語法:

DELETE FROM 表名稱 [where 列名=]

在這裏插入圖片描述

2.4 查詢(SELECT)

語法:

SELECT 列名|*  FROM 表名稱 [ where 列名 =]

標準查詢:

select  *  from t_user;
select  列名1,列名2,列名3...  from city_info_user;

帶條件查詢:

select * from t_user  where name=and password=;
select * from t_user where name='zhangsan' and password='123';

模糊查詢:
查詢t_user中列名爲name的包含“值”的記錄

select  *  from t_user where name like  %%;

統計查詢:
查詢t_user表有多少條記錄

select  count(*)  from  t_user;

分頁查詢:
語法:select * from t_user limit ?, ?;
從t_user表的第一條記錄開始(0代表第一條記錄),讀取5條。

select  *   from t_user limit 0,5;

3. 數據庫控制語言(DCL)

3.1 查看全部權限

DCL(數據庫控制語言)主要用於創建用戶,創建授權與權限收回操作。
查看全部權限:

show privileges;

3.2 創建&刪除用戶

創建用戶語法:

CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 

示例:

create  user  'zhangsan'@'127.0.0.1'  IDENTIFIED  by '123456';

在本地數據庫(ip:127.0.0.1)創建一個叫"zhangsan"的mysql用戶,並設置密碼爲"123456";

刪除用戶

 DROP USER 'username'@'host'; 

3.3 授權與撤銷

授權語法:

GRANT [privileges], [privileges]  ON databasename.tablename TO 'username'@'host' 

示例:
授予用戶’zhangsan’操作demo數據庫的student表select與insert權限。

GRANT SELECT, INSERT ON demo.student TO 'zhangsan'@'127.0.0.1'; 

撤銷用戶權限:
語法:

REVOKE [privilege],[privilege] ON databasename.tablename FROM 'username'@'host'; 

示例:
撤銷用戶zhangsan對數據庫demo的student表的select,insert權限。

REVOKE  select,insert ON demo.student FROM 'zhangsan'@'127.0.0.1'; 

3.4 更改用戶密碼

更改用戶密碼:
語法:

SET PASSWORD FOR 'username'@'host'=PASSWORD('newpassword');

示例:
設置root用戶的密碼爲“123456”。

set password for 'root'@'127.0.0.1' = password('123456');

4.事務控制語言(TCL)

4.1 什麼是事務?

事務是在程序執行多個操作的過程中,所有操作要麼都成功,否則就撤銷所有操作的更改。

4.2 事務的ACID特性

1、原子性(Atomicity)
事務是數據庫的邏輯工作單位,而且是必須是原子工作單位,對於其數據修改,要麼全部執行,要麼全部不執行。

2、一致性(Consistency)
事務在完成時,必須是所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用於事務的修改,以保持所有數據的完整性。

例如:對銀行轉帳事務,不管事務成功還是失敗,應該保證事務結束後帳戶表中張三和李四的轉賬總額爲2000元。

3、隔離性(Isolation)
一個事務的執行不能被其他事務所影響。

4、持久性(Durability)
一個事務一旦提交,事物的操作便永久性的保存在database中。即使此時再執行回滾操作也不能撤消所做的更改。

4.3 TCL語句

查詢當前事務狀態:

select   @@autocommit;

1 代表 自動提交事務。(mysql默認是自動提交事務)
0 代表手動提交事務。
在這裏插入圖片描述
設置手動提交事務:

@@autocommit=0;

提交事務:

COMMIT;

回滾事務:

ROLLBACK;

5.SQL常用函數

5.1 聚合函數

函數 AVG(): 返回指定組中的平均值,空值被忽略。
示例:查詢tb_student表中年齡的平均值

 select avg(age) from tb_student;

函數 COUNT():返回指定列的數量。
示例:查詢tb_student表中有多少條記錄

 select count(*) from tb_student;

函數MAX():返回指定列的最大值。
示例:查看tb_student表中age年齡最大的值是多少。

 select max(age) from tb_student;

函數MIN():返回指定列的最小值。
示例: 查看tb_student表中age年齡最小的值是多少。

 select min(age) from tb_student;

SUM():返回指定列的和
示例:查看tb_student表中所有的同學年齡的總和是多少。

 select sum(age) from tb_student;

5.2 日期和時間函數

NOW():返回當前日期
YEAR():返回指定日期的年份
MONTH():返回指定日期的月份
HOUR():返回指定時間的小時值
MINUTE():返回指定時間的分鐘數
DATEDIFF():返回起始時間和結束時間之間的天數

5.3 流程函數

語法:IF(expr1,expr2,expr3)
條件分支語句示例:

select  IF(salary>=3000,'高收入',if(salary<3000,'低收入','薪資未填')) from salary;

語法: IFNULL(column,‘返回值’)
示例:

select userId, ifnull(salary,'0') from salary;

語法: case when (條件) then ‘爲真則返回’ else ‘爲假則返回’ END
示例:

select CASE WHEN salary<=3000 THEN '低收入' else '高收入' END  from salary;

6.多表查詢

6.1 內連接

內連接的概念:
內連接分爲條件連接、等值連接和自然連接三種。通過多表查詢,返回2表之間交集的數據。
在這裏插入圖片描述
條件連接:
條件連接就是在多個表的集合中選取滿足條件的行的連接

select * from A,B where A.a > A.b  

等值連接:
等值連接就是特殊的條件連接,當條件爲某字段=某字段時,即爲等值連接。

select   *   from t_student   s, t_exam  e   where  s.id = e.sid;

自然連接:
自然連接(NATURAL JOIN)是一種特殊的等值連接,將表中具有相同名稱的列自動進行匹配。

PS:自然連接不必指定任何連接條件:

SELECT * FROM e_order o NATURAL JOIN e_user us ;

6.2 外連接

6.2.1 左外連接

左連接: 將左邊表的數據全部查詢出來,右表沒有的用null表示。
在這裏插入圖片描述
示例:
表1:e_user
在這裏插入圖片描述
表2:e_order
在這裏插入圖片描述
業務場景:查詢出所有用戶購買的訂單信息。(此處數據展示主體爲用戶,因此以用戶表爲基表。)

select u.*,o.order_code from e_user u left join e_order o on u.id=o.u_id;

結果如下圖:
在這裏插入圖片描述

6.2.2 右外連接

右連接概念:將右邊表的數據全部查詢出來,左表沒有的用null表示。
在這裏插入圖片描述
業務場景:查詢所有商品的購買信息。(此處數據展示主體爲商品)

select u.t_name,o.* from e_user u right join e_order o on u.id=o.u_id;

如下圖:
在這裏插入圖片描述

6.2.3 全外連接

關鍵字:union /union all
在這裏插入圖片描述
採用 union 全連接:
union會自動將完全重複的數據去除掉,只顯示一行。

語法:

(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB )

採用 union all 全連接:
union all會保留那些重複的數據;

語法:

(select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB )

6.3 自連接

6.3.1 自連接概念

自連接(self join)是SQL語句中經常要用的連接方式,使用自連接可以將自身表的一個鏡像當作另一個表來對待,即將一張表看成多張表來做連接,從而能夠得到一些特殊的數據。

6.3.2 使用場景

業務場景:通過員工表查詢公司員工以及該員工上級領導。
在這裏插入圖片描述

select worker.emp_name 員工 , mgr.emp_name 領導 from t_emp worker  left join t_emp mgr on worker.manager_id = mgr.emp_id;

效果如下圖:
在這裏插入圖片描述

6.4 子查詢

6.4.1 什麼是子查詢?

子查詢(subquery),即嵌套在其他查詢中的查詢。 (select語句中嵌套select語句)

6.4.2 單行子查詢

子查詢返回的結果集是 單行一列,直接使用 = > < >= <= <> 這些比較標量結果的操作符。

單行子查詢的本質:
1)只返回一行結果;
2)使用單行比較運算符;
業務場景:查詢薪資大於平均的員工信息

select * from e_user where t_salary >(select avg(t_salary) from e_user);

6.4.3 多行子查詢

由於子查詢返回的結果集是 N 行一列,因此不能直接使用 = > < >= <= <> 這些比較標量結果的操作符。需要使用IN,ANY,ALL操作符。

多行子查詢本質:根據子查詢的結果是否是多行單列。

IN:在指定項內,同IN(v1,v2,…)
示例:

select * from e_order where id in(select id from e_user where id<3);

ANY:表示與子查詢返回的任一個值比較是否爲true,則返回true。

any(…):大於最小值
< any(…):小於最大值
< all (…):小於所有值

如下圖:
在這裏插入圖片描述
業務場景:查詢薪資小於 產品經理與項目經理的 員工名和職位以及薪資。

select * from e_user where t_salary < all(select t_salary from e_user where t_job = '產品經理' or t_job='項目經理');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章