主頁 > 軟體設計 > 【超詳細】趁著國慶,我又將MySQL的基礎語法復習了一遍!

【超詳細】趁著國慶,我又將MySQL的基礎語法復習了一遍!

2021-10-11 16:27:12 軟體設計



  • 💂 個人主頁: 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

標籤:其他

上一篇:??《微服務開發—Swagger》(建議收藏)

下一篇:安全廠商安全技術工程師(校招)——技術要求

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more