- 💂 個人主頁: IT學習日記
- 🤟 著作權: 本文由【IT學習日記】原創、在CSDN首發、需要轉載請聯系博主
- 💬 如果文章對你有幫助、歡迎關注、點贊、收藏(一鍵三連)和訂閱專欄哦
- 💅 想尋找共同成長的小伙伴,請點擊【技術圈子】
文章大綱
- ? 一、前言
- ? 二、溫馨提醒
- ? 三、MySQL基礎語法
- 🟠 3.1、MySQL相關術語
- 3.1.1、資料庫(Database)
- 3.1.2、資料表(Table)
- 3.1.3、元組或者記錄
- 3.1.4、列或者欄位
- 3.1.5、主鍵
- 3.1.6、外鍵
- 3.1.7、索引
- 3.1.8、冗余
- 3.1.9、范式
- 3.1.10、視圖
- 3.1.11、存盤程序
- 🔵 3.2、認識SQL
- 3.2.1、SQL語言特點
- 3.2.2、SQL語言劃分
- 3.2.3、DDL(Data Definition Language) 資料定義語言
- Create關鍵字
- ALTER關鍵字
- DROP關鍵字
- 3.2.4、DML(Data ManipulationLanguage) 資料操作語言
- Insert關鍵字
- Delete關鍵字
- Update關鍵字
- 3.2.5、DQL(Data Query Language) 資料查詢語言
- Select關鍵字
- Distinct關鍵字
- From關鍵字
- Where關鍵字
- 聚合函式
- AVG聚合函式
- COUNT聚合函式
- MAX聚合函式
- MIN聚合函式
- SUM聚合函式
- Group by關鍵字
- Having關鍵字
- Order by關鍵字
- 3.2.6、DCL(Data Control Language) 資料控制語言
- 一、給用戶授權
- 二、撤銷授權:
- 3.2.7、TPL(Transaction Processing Language) 事務處理語言
- 一、事務的特性
- 二、如何保障事務的特性
- 三、事務的運用
- ? 四、專欄推薦
- ? 五、參考資料
- ? 六、寫在最后
| 一、前言 |
? 一、前言
-
大家好,我是小誠,MySQL從零學習系列已經更新到第七篇了,
上一篇介紹了客戶端和服務端之間互動的細節,這一篇則進入實戰,來真正了解MySQL的語法和使用, -
如果文章對你有幫助,可以幫忙一鍵三連和專欄訂閱哦!同時,誠摯邀請你加入我們的【技術圈子】,
| 二、溫馨提醒 |
? 二、溫馨提醒
??文章稍微有些長,博主國慶花費了兩天進行整理,大家如果暫時沒有這么多時間,可以先收藏和訂閱專欄哦,有時間了再拿出來學習,有問題記得私信博主!
| 三、MySQL基礎語法 |
? 三、MySQL基礎語法
🟠 3.1、MySQL相關術語
3.1.1、資料庫(Database)
??它是一種按照資料結構方式來組織、存盤和管理資料的倉庫,根據 是否依據關系模型 來設計,又將資料庫型別劃分為關系型資料庫和非關系型資料庫,
??關系模型: 表示物體與物體之間的資料的聯系,常見關系模型如一對一,一對多,多對多等
??關系型資料庫: 以關系模型為基礎進行組織資料的倉庫或者說將現實世界中的物體和關系通過模型表示出來從而形成的一種資料存盤關系,使用這種方式存盤資料的倉庫叫做關系型資料庫,
??例子:現實世界中人是一種物體,職業也是一種物體,人跟職業之間是存在關系的,人是由多個屬性組成(如:姓名、性別等),職業也是由多個屬性組成(如:職業名稱,編號),人跟職業之間的關系是一對多的即一個人可以擁有多個職業,將人和職業資料按照這種關系模型存盤起的倉庫則稱為關系型資料庫,
??非關系型資料庫: 不以關系模型為基礎進行組織資料的倉庫,它的出現是為了解決在大資料模式下關系型資料存在的性能、拓展性瓶頸問題,非關系型資料庫去除了資料間的關系性(即資料之間不存在一對一、一對多等關系),因此它也不能保證關系資料的ACID特征,但是因為去除了資料之間的關系,它在資料庫情況下有著更高的讀寫性能和更易拓展的優點,
3.1.2、資料表(Table)
??上面說到關系型資料庫基礎就是關系模型,簡單來講,關系模型就是指二維表格模型,這種二位表格也叫作資料表,用于存盤某一個組成某個物體的屬性資料,一個資料庫存在多個資料表構成,

3.1.3、元組或者記錄
??一個資料表由多個屬性構成,由多個屬性構成的一條資料也叫行或者記錄,資料表就是由一行行的記錄構成的,
3.1.4、列或者欄位
??組成資料表的每一個屬性又叫做列或者欄位,它們存盤的相同型別的資料,如:性別欄位,存盤的值只有男女,

3.1.5、主鍵
??能夠唯一標識一個資料表中一條資料的一個或者多個欄位(由多個欄位構成的主鍵又稱為聯合主鍵),且組成主鍵的欄位應該是從不變化或極少變化的屬性,一般這個主鍵的選取需要與業務無關,如:常見的自增長id,
3.1.6、外鍵
??用來關聯兩個物體(資料表)之間一個關系的欄位,擁有外鍵欄位的表又叫做主表,使用外鍵欄位作為主鍵的表則稱為從表,現在一般推薦使用邏輯外鍵而不使用物理外鍵,
3.1.7、索引
??本質上它是一種資料結構,通過對定義成索引的列進行排序好并存盤起來,用來快速訪問到資料表中某些資料的結果,類似于書本的目錄,如MySQL資料庫中的索引的實作就是B+Tree資料結構,常見的索引型別有:普通索引、主鍵索引、唯一索引、組合索引、全文索引、Hash索引等,
3.1.8、冗余
??存盤某些重復的資料,以達到防止資料丟失、提高查詢性能等目的,
3.1.9、范式
??定義:
??設計關系資料庫時,遵從不同的規范要求,設計出合理的關系型資料庫,這些規范要求被稱為范式,各種范式呈遞次規范,越高的范式資料庫冗余越小,
??目前關系型資料庫存在六種范式即:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式),
??使用:
??一般來說,在正常的業務設計中,最少應該滿足第二范式(這個并不是固定死的,具體還是要根據業務決定),因為開發中接觸到范式的也就前三個范式,所以此處也只介紹第一、二、三范式,
??第一范式: 表中的每個列都不能再拆分既列有原子性,
??第二范式: 在第一范式的基礎上,一個表必須擁有一個主鍵,同時非主鍵列完全依賴于主鍵,而不能依賴于主鍵的一部分,
??第二范式舉例:
??如一個訂單明細表OrderDetail其屬性如下:(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName),一個訂單中可以包含多個產品,所以單單一個OrderID 是不足以成為主鍵的,主鍵應該是(OrderID,ProductID)
??從表中可以知道Discount(折扣),Quantity(數量)完全依賴(取決)于主鍵(OderID,ProductID),而UnitPrice,ProductName 只依賴于 ProductID,所以 OrderDetail 表不符合 2NF,不符合 2NF的設計容易產生冗余資料,
??第二范式舉例解決方案:
??可以把OrderDetail表拆分為以下兩個表,來消除原訂單表中UnitPrice,ProductName多次重復的情況:
??OrderDetail(OrderID,ProductID,Discount,Quantity)
??Product (ProductID,UnitPrice,ProductName)
??第三范式: 在第二范式的基礎上,非主鍵列只依賴于主鍵,不依賴于其他非主鍵(不存在傳遞依賴)即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況
??第三范式舉例:
??如: 訂單表Order:(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主鍵是(OrderID),其中OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主鍵列都完全依賴于主鍵(OrderID),所以符合 2NF,
??不過問題是CustomerName,CustomerAddr,CustomerCity 直接依賴的是CustomerID(非主鍵列),而不是直接依賴于主鍵,它是通過傳遞才依賴于主鍵,所以不符合 3NF,
??總結:
??第一范式:欄位需要具有原子性
??第二范式:主鍵列與非主鍵列遵循完全函式依賴關系,不能是部分依賴關系
??第三范式:非主鍵列之間沒有傳遞函式依賴關系
3.1.10、視圖
??一個或者幾個基本表匯出的表,它與正常的資料表不同,只是一個虛表,資料庫中只存放視圖的定義,而不存放視圖對應的資料,這些資料仍存放在原來的基本表中,所以一旦基本表中發生資料變化,從視圖中查詢出的資料也就隨之改變了,
3.1.11、存盤程序
??在資料庫中,為了提高資料庫操作的效率和SQL代碼的封裝,將特定功能的SQL陳述句集封裝并存盤在資料庫中,經過第一次編譯后,再次呼叫不需要再次編譯,用戶只需指定存盤程序名字并給定引數就可以執行完成任務,
🔵 3.2、認識SQL
??我們平常總說,寫SQL陳述句,但是,你清楚SQL陳述句中的SQL代表什么含義?
??SQL(全稱:Structured Query Language)也叫結構化查詢語言,它是由ANSI(American National Standards Institute 美國國家標準化組織)維護的一個標準的訪問和處理資料庫的標準計算機語言,通過它,我們可以訪問到資料庫,對它進行資料添加、修改、洗掉、查詢等操作,常用的關系型資料都基本都支持通過該語言對資料庫進行操作,但是不同的資料庫也會有自己特定的需求,在這個基礎上拓展自己額外的一些功能,
3.2.1、SQL語言特點
- SQL語言對大小寫不敏感,即SELECT和select其實效果是一樣的
- 非程序化,只需要指明需要"做什么",不需要指明"怎么做",如:洗掉一個陳述句就直接delete * from table where xxx
- 簡單易學:SQL的語法語意性很強,經過簡單的學習就可以上手
3.2.2、SQL語言劃分
??一、DDL(Data Definition Language) 資料定義語言
??用于資料結構和資料庫表定義、修改等操作語言,常用的關鍵字:CREATE(創建)、DROP(洗掉)、ALTER(修改)等,
??二、DML(Data ManipulationLanguage) 資料操作語言
??主要用于對資料表中資料進行增、刪、改等操作的語言,常用關鍵字:Insert、delete、update等,和DDL不同的是,它變動的是具體表中的資料,而DDL是對庫和表等結構的變動,
??三、DQL(Data Query Language) 資料查詢語言
??主要負責根據條件查詢和篩選資料,常用關鍵字:select、from、where、group by、having、order by等
??四、DCL(Data Control Language) 資料控制語言
??主要負責管理用戶訪問資料權限的控制,它可以控制特定用戶賬戶對資料表、查看表、預存程式、用戶自定義函式等資料庫物件的控制權,常用關鍵字: GRANT(授權陳述句),REVOKE(撤銷授權陳述句),
??四、TPL(Transaction Processing Language) 事務處理語言
??主要用于管理事務,保證資料的一致性,關鍵字:Start Transaction:開始事務,Commit:已完成的作業提交,Rollback:回滾之前沒提交的所有操作,
??savepoint :在事務中設定回滾點,結合rollback關鍵字,可以回滾到此處,一個事務可以設定多個回滾點,然后通過回滾到指定的回滾點完成對應事務的回滾銷毀,
??設定回滾點語法: savepoint 回滾點名字,
??回滾到指定點語法: rollback to 回滾點名字
3.2.3、DDL(Data Definition Language) 資料定義語言
??上面提到,DDL主要是用于資料庫、表結構等定義,修改、洗掉的,下面我們就通過DDL來實作對資料庫的操作,
Create關鍵字
??一、創建資料庫
// 創建名為test的資料庫
create database test
??二、創建資料表
// 創建名為user的資料表
create table user(
id int primary key auto_increment,
user_name varchar(255),
sex char(2),
age int
)
??三、以另外一個表某些欄位映射成新的表
??例子:將user1的表中的user_name映射成新的user2表
create table user2 as
select user_name from user1;
??四、創建索引
??索引可用于快速地從資料庫中檢索資料,用戶無法看到索引,它們只是用于加速搜索,如:在user1表上的user_name欄位創建名為idx_user_name的普通索引
create index idx_user_name
on user1(user_name);
??五、創建視圖
??視圖是基于SQL陳述句結果集的一個虛擬的表,它的資料還是依賴于SQL陳述句的基本表,如果資料有變動,則視圖查詢回來的資料也會變動,如:創建名為user_view的視圖
create view user_view as
select user_name,sex from user1;
??除此之外,還可以通過create or replace view來創建或者更新視圖,如下:
create or replace view user_view as
select user_name,sex from user1;
??六、創建存盤程序
??存盤程序是可以將常用SQL陳述句保存起來,存盤在資料庫中,經過第一次編譯后,再次呼叫不需要再次編譯,用戶只需指定存盤程序名字并給定引數就可以執行完成任務,用于提供資料庫操作效率,
??如:我們常用select * from user1,那就可以通過下面定義存盤程序的方式將這個SQL保存起來,后面再需要時直接執行對應的存盤程序即可
??存盤程序在定義的時候還可以指定引數,它的引數型別有以下三種:in 要輸入的引數,out 輸出的引數 ,inout 輸入輸出的引數
??定義語法: create procedure([[in |out |inout ] 引數名 資料型別…])
??呼叫語法: call 存盤程序名稱(引數串列…)
// 創建存盤程序
creare procedure selectAllUser()
begin
// 注意,在begin和end之間的陳述句需要使用分號作為結束,否則執行會報錯
select * from user1;
end;
// 執行存盤程序
call selectAllUser();
ALTER關鍵字
??ALTER關鍵字主要的功能是用于修改之前使用Create關鍵字定義好的結構,如資料表中列的添加、洗掉、資料型別,視圖的結構等,
??一、往表中添加的新的列
// 往user1表中添加名為password的欄位
alter table user1
add column password varchar(255);
??二、洗掉表中指定的列
// 將user1表中洗掉名為password的欄位
alter table user1
drop column password ;
??三、修改表中列的屬性
// 將user1中password的欄位型別修改為int
alter table user1
modify column password int;
??三、修改視圖結構
// 將視圖user_view1修改為只包含user_name欄位的視圖
alter view user_view as
select name from test1_user;
DROP關鍵字
??DROP關鍵字顧名思義,就是用于洗掉操作,比如洗掉表、欄位、資料庫等
??一、洗掉資料庫
// 洗掉名為demo的資料庫
drop database demo;
??二、洗掉資料表
// 洗掉名為user1的資料表
drop table user1;
??三、洗掉表中的某些欄位
// 洗掉資料表user1中的user_name欄位
alter table user1
drop column user_name;
??四、洗掉視圖
// 洗掉名為user_view的視圖
drop view user_view;
??五、洗掉普通索引
// 洗掉名為user_password的索引
alter table user1
drop index user_password;
??六、洗掉主鍵索引
// 洗掉名為user_password的主鍵索引
alter table user1
drop primary key;
3.2.4、DML(Data ManipulationLanguage) 資料操作語言
Insert關鍵字
??Insert關鍵字主要作用是往表中插入資料,語法:Insert into 表名(插入欄位名…) values(欄位對應的值)
??一、往表中所有欄位插入資料
// 往user1表所有欄位插入資料
insert into user1 values(12,'小明',1,12);
??二、往表中部分欄位插入資料
// 往user1表user_name欄位插入資料
insert into user1(user_name) values('小明');
??三、從另一張表復制資料到新表
??語法:Insert into select 新表名稱(欄位名…) select 欄位名… from 另外的表名(注意:復制的欄位值型別應該保持一致)
// 將user1表中的user_name,id兩個欄位的值復制到表user2中
insert into user2(id,user_name) select id,user_name from user;
Delete關鍵字
??Delete關鍵字主要用于資料表資料的洗掉操作,它只是洗掉表中的資料,并不會對表的結構和索引造成影響(注意:生產環境慎用該陳述句,如果要使用該陳述句時一定要檢查仔細是否需要帶where條件,不然,只能連夜買票跑路了)
??語法: Delete * from 表名 where 洗掉的條件
??一、洗掉表中全部資料
// 洗掉user1表中的所有資料
delete * from user1;
??二、洗掉表中部分資料(需要結合where關鍵字)
// 洗掉user1表中的id為1的資料
delete * from user1 where id = 1;
Update關鍵字
??Update關鍵字主要用于對表資料的一個更新操作,不會對表結構和索引造成影響(注意:使用時一定要檢查是否需要攜帶where條件,如果不攜帶,則更新的是表中所有的記錄的資料)
??一、更新某些記錄欄位的值(需要結合where條件)
// 更新user1表中id為1的記錄user_name為小明
update user1 set user_name = '小明' where id = 1;
??一、更新表中所有記錄某些欄位的值
// 更新user1表中所有記錄的user_name改為五五開
update user1 set user_name = '五五開';
3.2.5、DQL(Data Query Language) 資料查詢語言
??在資料庫的操作中,查詢操作占百分之90以上,因此,掌握常用的查詢操作至關重要,
Select關鍵字
??顧名思義,select主要是用于查詢資料的,它結合其他的關鍵字使用,會存在非常多種組合,下面先來看看它的基礎使用,
??一、查詢所有資料(一般不推薦查詢全部欄位,只查詢需要的欄位即可,不然會降低查詢性能)
// 查詢表User1中所有的資料
select * from user1;
??二、查詢表中某些欄位資料
// 查詢表User1中id,user_name欄位
select id,user_name from user1;
Distinct關鍵字
??一、查詢表唯一不同的值(也可以說:去重)
// 如user1表中user_name中名稱很多重復,重復的名稱我們只想它顯示一個就可以,則可以使用distict
select distinct user_name from user1;
??未使用distinct關鍵字去重之前的資料

??使用distinct關鍵字去重之后的資料

From關鍵字
??From關鍵字后面接的是查詢或者洗掉資料的來源,資料的來源常見的包括:資料表,子查詢回傳的資料集(洗掉的時候from后面需要對應的資料表,不能是子查詢的結果集),
??一、From后面接資料表,查詢資料
// 查詢user表中所有的資料
select * from user
??二、From后面接子查詢結果集,查詢資料(結果集后面一定要有別名哦)
// 查詢子查詢回傳的結果集
select * from (select * from user where id = 2)temp_user;
??三、From后面接資料表,洗掉資料
// 洗掉user表中Id為1的資料
delete from user where id = 1;
Where關鍵字
??Where關鍵字主要是用于查詢、洗掉、修改時做條件限制,過濾僅滿足條件的資料回傳,
??Where關鍵字后面常接的運算子:>、<、=、!=(不等于)、>=、<=、BETWEEN…AND(在一定范圍內連續的值)、like(模糊匹配)、in(指定多個符合條件的值,不需要連續)
??一、>、<、>=、<=運算子
// 查詢id大于1的資料
select * from user where id >1
// 查詢id大于等于2的資料
select * from user where id >2
// 查詢id小于100的資料
select * from user where id < 1
// 查詢id不等于1的資料
select * from user where id != 1
??二、BETWEEN...AND(運算子
// 查詢id為1到10的資料
select * from user where id between 1 and 10;
??三、like運算子
??結合like關鍵字使用的通配符:%表示匹配零個或者多個字符,_表示匹配任意一個字符
// 查詢名字以五開頭的資料
select * from user where name like '%五';
// 查詢名字以五結尾的資料
select * from user where name like '五%';
// 查詢以五開頭,名字只包含兩個字符的資料
select * from user where name like '五_';
??三、in運算子
// 查詢id為1、3、5的資料
select * from user where in (1,3,5)
聚合函式
??定義:對一組值進行算計,回傳單個值,也被稱作組函式,常與Group by 和 Having關鍵字聯合使用,常見的聚合函式如:AVG(計算平均值),Count(計算總條數)等等,
AVG聚合函式
??定義: 用于回傳數值列的平均值,NULL值的列不在計算范圍,
??語法: select avg(要統計的數值列名稱) from 表名
??案例: select avg(age) from user;(統計user表中所有用戶的平均年齡)

COUNT聚合函式
??定義: 用于回傳符合條件的記錄數,NULL值的列不在計算范圍,
??語法: select count(要統計的列名稱) from 表名
??案例: select count(*) from user;(統計user表中總的用戶數)

??延伸: count()、count(欄位名)、count(1)有什么差別,更推薦使用哪個?
?? count()和count(1)一樣,回傳符合條件的記錄總條數,count(欄位名)則是回傳符合條件中欄位名所在的列中非NULL值的記錄總條數(即如果欄位名對應列的值為NULL,則不會被記到總數中),COUNT(*)是 SQL92 定義的標準統計行數的語法,并且效率高,所以請直接使用COUNT(*)查詢表的行數!
MAX聚合函式
??定義: 用于統計列中的最大值,NULL值的列不在計算范圍(注意:MAX 也可用于文本列,以獲得按字母順序排列的最高值),
??語法: select MAX(要統計的列名稱) from 表名
??案例: select MAX(age) from user;(統計user表中年齡最大為多少歲)

MIN聚合函式
??定義: 用于統計列中的最小值,NULL值的列不在計算范圍(注意:MIN也可用于文本列,以獲得按字母順序排列的最小值),
??語法: select MIN(要統計的列名稱) from 表名
??案例: select MIN(age) from user;(統計user表中年齡最小為多少歲)

SUM聚合函式
??定義: 統計回傳數值列的累加總數,NULL值的列不在計算范圍
??語法: select SUM(要統計的列名稱) from 表名
??案例: select SUM(age) from user;(統計user表中年齡總數)

Group by關鍵字
??定義: 主要用于資料結果集進行分組,常和聚合函式、以及Having關鍵字一起使用(注意:使用group by關鍵字時,select 后面查詢的欄位必須出現在group by后面或者使用聚合函式包圍起來),
??語法: select 分組欄位 from 表名 group by 分組欄位
??案例: select count(*) ,sex from user group by sex;(統計user表中男女的數量)

??說明: 有些同學會發現使用group by關鍵字時,如果select后面的欄位不出現在group by后面會報錯,而有些同學又可以,其實原因與資料庫的sql_mode有關,如果sql_mode變數含有only_full_group_by值,則select后面的欄位必須在聚合函式或者出現在group by后面,如果無only_full_group_by,則groupby不受上面的限制,
??解決: 使用select @@sql_mode查詢sql_mode的值,如果包含only_full_group_by關鍵字,可以使用:set @@sql_mode=xxx將only_full_group_by洗掉即可,
Having關鍵字
??定義: 如果SQL陳述句中使用了聚合函式和Group by,此時還想在這基礎上對查詢出來的結果集進行條件篩選,則可以使用Having關鍵字,不能使用where關鍵字,
??語法: select 分組欄位 from 表名 group by 分組欄位 having xx條件
??案例: select count(*),sex from test1_user GROUP BY sex HAVING avg(age) > 15;(統計user表中年齡大于15歲的男女生人數)

Order by關鍵字
??定義: 用于按升序或降序對結果集進行排序(注意:Order by命令默認按升序對結果集進行排序,要按降序對記錄進行排序,則使用DESC關鍵字)
??語法: select xxx from 表名 order by xx欄位 [asc | desc]
??案例: select * from test1_user order by age;(將user表中的資料按照年齡的順序排序)

3.2.6、DCL(Data Control Language) 資料控制語言
??定義: 主要負責管理用戶訪問資料權限的控制,它可以控制特定用戶賬戶對資料表、查看表、預存程式、用戶自定義函式等資料庫物件的控制權,常用關鍵字: GRANT(授權陳述句),REVOKE(撤銷授權陳述句),
??想要進行各種權限管理,我們必須有對應的賬戶才行,下面來看看MySQL如何創建用戶,
??一、創建用戶:
??語法: create user ‘username’@‘host’ identified by ‘password’;
??username: 表示創建用戶的名稱,
??host: 指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%否則,指定具體的ip地址,
??password: 該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務器
??舉例: create user ‘demo’@‘localhost’ identified by ‘123456’;(創建好的用戶可以在自帶的mysql資料庫的user表中可以看到)

??二、洗掉用戶:
??語法: drop user ‘username’@‘host’;

一、給用戶授權
??注意,剛創建好的用戶無法通過命令列或者navicat等工具連接到mysql資料庫服務器,因為還沒有給它們分配對應的權限,下面來具體看分配權限的操作吧!
??語法: grant privileges ON databasename.tablename TO ‘username’@‘host’
??privileges : 表示分配給用戶的操作權限,如SELECT,INSERT,UPDATE等,如果要授予所的權限則使用ALL
??databasename: 表示允許用戶操作的資料庫,如果要授權所有則使用*
??tablename : 表示允許用戶操作的資料庫對應的資料表,如果要授權所有則使用*
??username: 表示分配權限的用戶名,
??host: 表示分配權限用戶可訪問的地址,
??例子: grant all on . to ‘demo’@‘localhost’😭注意:有些同學如果分配完權限后還是無法連接資料庫的,可以重啟下mysql服務器即可)

二、撤銷授權:
??語法: revoke privilege ON databasename.tablename FROM ‘username’@‘host’;
??說明: 撤銷授權引數和授權引數基本一樣,只是將授權中的to修改成from,具體的引數含義,請引數授權引數決議.
3.2.7、TPL(Transaction Processing Language) 事務處理語言
??定義: 主要用于管理事務,保證資料的一致性,關鍵字:Start Transaction:開始事務,Commit:已完成的作業提交,Rollback:回滾之前沒提交的所有操作,
??事務: 它表示一個操作集合,在集合中的操作要么都執行,要么都不執行,它是一個不可分割的作業單位,例如,銀行轉帳作業:從一個帳號扣款同時另一個帳號增款,這兩個操作要么都執行,要么都不執行,
一、事務的特性
??資料庫的事務必須具有以下四個屬性即我們常說的ACID:Atomic(原子性)、Consistency(一致性)、Isolation(隔離性)和Durability(持久性)
??Atomic(原子性): 一個事務(Transaction)中的所有操作,要么全部完成,要么全部不完成,它是原子性的,不會結束在中間某個環節,即使在執行程序出現例外,那也會回滾到事務開始前的狀態,
??Consistency(一致性): 在事務開始之前和結束之后,資料完整性不被破壞,比如轉賬行為:A用戶有20元,B用戶有10元,A用戶轉了10元給B用戶,當轉賬行為結束后,A和B用戶賬戶的數額總額還是30元,
??Isolation(隔離性): 在并發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間,事務查看資料更新時,資料所處的狀態要么是另一事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看到中間狀態的資料,可以通過設定不同隔離級別來實作不一樣的效果
??Durability(持久性): 事務成功執行后,它對資料庫所做的操作就必須永久保存下來,即使發生系統崩潰,重新啟動資料庫系統后,資料庫還能恢復到事務成功結束時的狀態,
二、如何保障事務的特性
??事務的ACID特性是由提供了事務機制的關系型資料庫實作的如MySQL,關系型資料庫管理系統采用日志來保證事務的原子性、一致性和持久性,
??日志記錄了事務對資料庫所做的更新,如果某個事務在執行程序中發生錯誤,就可以根據日志,撤銷事務對資料庫已做的更新,使資料庫退回到執行事務前的初始狀態(具體的日志分析需要到后面進階文章再詳細介紹,現在只需要知道有這個概念即可),
??事務的隔離性是通過資料庫鎖機制實作, 多個事務同時更新資料庫中相同的資料時,只允許持有鎖的事務能更新該資料,其他事務必須等待,直到前一個事務釋放了鎖,其他事務才有機會更新該資料,
三、事務的運用
??一、開啟事務: DML語言的事務默認情況下是自動提交的,如有需要手動控制,可以使用:start Transaction
??二、提交事務: 如果事務集合操作已經執行完成,需要手動提交,使用:commit
??三、回滾事務: 如果在執行程序中,出現錯誤情況,需要將事務開啟后執行的操作都撤銷,可以使用:rollback
??四、設定回滾點: 如果需要自定義回滾點,可以使用:savepoint 回滾點名字,
??五、回滾到指定點語法: rollback to 回滾點名字
| 四、專欄推薦 |
? 四、專欄推薦
??良心推薦: 下面的相關技術專欄還在免費分享哦,大家可以幫忙點點訂閱哦!
??面試干貨專欄
??常見開發問題專欄
??JAVA進階知識專欄
??從0到1-全面深刻理解MySQL系列專欄
| 五、參考資料 |
? 五、參考資料
??《SQL教程》
??《W3CSchool-SQL教程》
| 六、寫在最后 |
? 六、寫在最后
??MySQL從0到1之SQL基礎語法第一篇到此告一段落了,對于初學者來說,學習這個也是需要比較多時間的,下一篇會寫關于語法的進階篇如關聯查詢、索引等知識,敬請期待,如果文章對你有幫助,記得給博主一鍵三連和關注專欄,博主會繼續更新更多的文章回饋你的激勵!
??推薦一下: 博主最近搭建了一個技術圈子,【技術圈子】目的是為了搭建共享資源平臺,因為很多人尋找資源路徑有限,但是人多力量大,將它們整理起來尋找資源的方式就多了,也更容易了,
??博主保證:圈內所有資源都免費,資源包括但不限于免費面試資源、簡歷模板、年侄訓報PPT、CSDN VIP下載資源等等,無論你是大學生、還是已經作業的開發者,都期待您的加入!感興趣者可以掃描下面二維碼或者查看左邊導航欄進入技術圈子,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308910.html
標籤:其他
