資料庫系統(五)---MySQL基礎

来源:https://www.cnblogs.com/huyangshu-fs/archive/2019/11/03/11782784.html
-Advertisement-
Play Games

一、SQL基本概念: SQL 已經成為關係資料庫的標準語言,是一種資料庫查詢和程式設計語言,用 於存取數據以及查詢、更新和管理關係資料庫系統。 功能不僅僅是查詢,還包括數據定義、數據操縱和數據控制等於資料庫有關的 一系列功能。 四大功能:數據查詢、數據定義、數據操縱和數據控制。 1)嵌入式和動態 S ...


一、SQL基本概念: 

  SQL 已經成為關係資料庫的標準語言,是一種資料庫查詢和程式設計語言,用 於存取數據以及查詢、更新和管理關係資料庫系統。 功能不僅僅是查詢,還包括數據定義、數據操縱和數據控制等於資料庫有關的 一系列功能。

  四大功能:數據查詢、數據定義、數據操縱和數據控制。

  1)嵌入式和動態 SQL 規則 規定了 SQL 語句在高級程式設計語言中使用的規範方法,以便適應較為複雜的 應用。

  2)SQL 調用和會話規則 調用包括 SQL 常式和調用規則,以便提高 SQL 的靈活性、有效性、共用性以 及使 SQL 具有更多的高級語言的特征。

    3)關係資料庫系統支持三級模式結構,其模式、外模式和內模式中的基本對象有 資料庫模式、表、索引、視圖等。 SQL 標準提供的數據定義語句如下表:

    

二、MySQL

1、MySQL基礎概念

  MySQL 是一個關係資料庫管理系統(RDBMS),它具有客戶/伺服器體繫結構。

      MySQL 中的 SQL 作為一種關係型資料庫管理系統,遵循 SQL 標準,提供了對數據定義語言 DDL、數據操縱語言 DML、數據控制語言 DCL 的支持,同樣支持關係資料庫的三級模式結構。 MySQL 中一個關係對應一個基本表,一個或多個基本表對應一個存儲文件,一 個表可以有若幹索引,索引也存放在存儲文件中。

   MySQL 在 SQL 標準的基礎上增加了部分擴展的語言要素:包括常量、變數、 運算符、表達式、函數、流程式控制制語句和註解等。

  1)常量 是指在程式運行過程中值不變的量,也稱為字面值或標量值。常量的使用格式 取決於值的數據類型,可分為字元串常量、數值常量、十六進位常量、時間日期常量、位欄位值、布爾值和 NULL 值。

  字元串常量是指用單引號或雙引號括起來的字元序列,分為 ASCII 字元串常量 和 Unicode 字元串常量。

  十六進位值通常指定為一個字元串常量,每對十六進位數字被轉換為一個 字元,其最前面有一個大寫字母 X 或小寫字母 x。

  日期和時間常量是用單引號將表示日期時間的字元串括起來構成的。 使用 b‘value’格式書寫位欄位值。Value 是一個用 0 或 1 書寫的二進位值。

  2)變數 在 MySQL 中,變數分為用戶變數和系統變數。用戶變數前常添加一個符號 “@”,大多數系統變數前,添加兩個“@”符號。

  3)運算符 MySQL 幾類編程語言中常用的運算符:

         算術運算符:+(加)、—(減)、*(乘)、/(除)和%(求模)

    位運算符有:&(位與)、|(位或)、^(位異或)、~(位取反)、>>(位右 移)、<<(位左移)。

    比較運算符:=(等於)、>(大於)、<(小於)、>=(大於等於)、<=(小 於等於)、<>(不等於)、!=(不等於)、<=>(相等或都等於空)。

    邏輯運算符:NOT 或!(邏輯非)、AND 或&&(邏輯與)、OR 或||(邏輯 或)、XOR(邏輯異或)

  4)表達式 是常量、變數、列名、複雜計算、運算符和函數的組合。 表達式可分為字元表達式、數值型表達式和日期表達式。

  5)內置函數 MySQL 包含了 100 多個函數,基本分類如下:

    數學函數,例如 ABS()函數、SORT()函數; 聚合函數,例如 COUNT()函數;

    字元串函數,例如 ASCII()函數、CHAR()函數;

    日期和時間函數,例如 NOW()函數、YEAR()函數;

    加密函數,例如 ENCODE()函數、ENCRYPT()函數;

    控制流程函數,例如 IF()函數、IFNULL()函數;

    格式化函數,例如 FORMAT()函數;

    類型轉換函數,例如 CAST()函數;

    系統信息函數,例如 USER()函數、VERSION()函數。

2、索引定義

 (1)索引是 DBMS 根據表中的一列或若幹列按照一定順序建立的列值與記錄行之間的對應關係表,因而索引實質上是一張描述索引列的列值與原表中記錄行之間 一一對應關係的有序表。

 (2)索引在邏輯上通常包含以下幾類:

   2.1)普通索引:最基本的索引類型,沒有任何限制;

   2.2)唯一性索引:索引列中的所有值都只能出現一次,必須是唯一的;

   2.3)主鍵:一種唯一性索引。 

   (3)索引存在的弊端如下:

    3.1)索引是以文件的形式存儲的,DBMS 會將一個表的所有索引保存在同一個索引文件中,索引文件需要占用磁碟空間。

    3.2)索引在提高查詢速度的同時,卻會降低更新表的速度。

 (4)相關SQL

  查詢已創建的索引            show {index|indexes} {in|from} test_table;

  創建索引                create index  index_name on test_table(s_name,s_age);

  創建索引(使用alter table的方式)     alter table test_table add index index_name(s_name,s_age)

  刪除索引                     drop index index_name on test_table;

  刪除索引(使用alter table的方式)     alter table test_table drop index index_name;

3、視圖

  (1)視圖是資料庫中的一個對象,它是資料庫管理系統提供給用戶的以多種角度觀察資料庫中數據的一種重要機制。外模式對應到資料庫中的概念就是視圖。   (2)視圖仍不同於資料庫中真實存在的基本表,它們存在以下區別:     1)視圖不是資料庫中真實的表,而是一張虛擬表。     2)視圖的內容是由存儲在資料庫中進行查詢操作的 SQL 語句來定義的,它的列數據與行數據均來自於定義視圖的查詢所引用的真實表,並且這些數據是在引用視圖時動態生成的。     3)視圖不是以數據集的形式存儲在資料庫中,它所對應的數據實際上是存儲在視圖所引用的真實表中。     4)視圖是用來查看存儲在別處的數據的一種虛擬表,而其自身並不存儲數據。   (3)使用視圖有如下優點:     1)集中分散數據;     2)簡化查詢語句;     3)重用 SQL 語句:保護數據安全;共用所需數據;更改數據格式。   (4)相關SQL示例   創建視圖           create or replace view cus_view as   select * from test_table where s_age = 19  with check option;   刪除視圖             drop view cus_view;   查詢創建的視圖   show create view cus_view;     數據操作   -- 添加       insert into customers_view values(0,'ww',1,'ww','ww');   -- 更新       update customers_view set cust_name='qq' where cust_id=5;   -- 刪除       delete from customers_view where cust_id=5;   -- 查詢       select * from cus_view;   4、觸發器   (1)觸發器是用戶定義在關係表上的一類由事件驅動的資料庫對象,也是一種保證數據完整性的方法。觸發器一旦定義,無須用戶調用,任何對錶的修改操作均為資料庫伺服器自動激活相應的觸發器。觸發器與表的關係十分密切,其主要作用是實現主鍵和外鍵不能保證的複雜的參照完整性和數據的一致性,從而有效地保護表中的數據。   (2)SQL示例    創建觸發器  create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_body;   5、封鎖  封鎖是最常用的併發控制技術,它的基本思想是:需要時,事務通過向系統請求對它所希望的數據對象加鎖,以確保它不被非預期改變。 (1) 鎖   一個鎖實際上就是允許或組織一個事務對一個數據對象的存取特權。基本的封鎖類型有兩種:排他鎖和共用鎖。 (2)用封鎖進行併發控制   工作原理是:   (1) 若事務 T 對數據 D 加了 X 鎖,則所有別的事務對數據 D 的鎖請求都必須等待直到事務 T 釋放鎖。   (2) 若事務 T 對數據 D 加了 S 鎖,則別的事務還可對數據 D 請求 S 鎖,而對數據 D 的 X 鎖請求必須等待直到事務 T 釋放鎖。   (3) 事務執行資料庫操作時都要先請求相應的鎖,即對讀請求 S 鎖,對更新(插入、刪除、修改)請求 X 鎖。這個過程一般是由 DBMS 在執行操作時自動隱含地進行。   (4) 事務一直占有獲得的鎖直到結束(COMMIT 或 ROLLBACK)時釋放。因此,利用封鎖機制可以解決併發操作所帶來的三個不一致問題。 (3)封鎖的粒度   以粒度來描述封鎖的數據單元的大小。DBMS 可以決定不同粒度的鎖。由最底層的數據元素到最高層的整個資料庫,粒度越細,併發性就越大,但軟體複雜性和系統開銷也就越大。 (4)封鎖的級別   封鎖的級別又稱為一致性級別或隔離度。   由各種鎖的類型與其封鎖期限組合可形成不同的封鎖級別:   (1)0 級封鎖   (2)1 級封鎖   (3)2 級封鎖   (4)3 級封鎖 (5)活鎖與死鎖   在併發事務處理過程中,由於鎖會使一事務處於等待狀態而調度其他事務處理,因而該事務可能會因優先順序低而永遠等待下去,這種現象稱為“活鎖”。活鎖問題的解決與調度演算法有關,一種最簡單的辦法是“先來先服務”。兩個以上事務迴圈等待被同組中另一事務鎖住的數據單元的情形,稱為“死鎖”。DBMS 需要提供死鎖預防、死鎖檢測和死鎖發生後的處理技術與方法。預防死鎖的辦法在操作系統中已普遍討論,其中主要有如下幾種:   (1) 一次性鎖請求   (2) 鎖請求排序   (3) 序列化處理   (4) 資源剝奪 (6)可串列性   一組事務的一個調度就是它們的基本操作的一種排序。若在一個調度中,對於任意兩個事務 T1 和 T2,要麼 T1 的所有操作都在 T2 所有操作之前,要麼反之,則該調度室串列的,因而是正確的。通常,在資料庫系統中,可串列性就是併發執行的正確性準則,即當且僅當一組事務的併發執行調度是可串列化,才認為它們是正確的。 (7)兩段封鎖法   採用兩段封鎖法是一種最簡單而有效的保障封鎖其調度是可串列性的方法。兩段鎖協議規定在任何一個事務中,所有加鎖操作都必須在所有釋放鎖操作之前。其中,事務劃分成如下兩個階段。   (1) 發展(Growing)或加鎖階段   (2) 收縮(Shrinking)或釋放鎖階段   定理:遵循兩段鎖協議的事務的任何併發調度都是可串列化的。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.在PostgreSQL安裝目錄下data文件夾,打開pg_hba.conf文件,新增允許訪問的ip 2.打開postgresql.conf,將listen_addresses = 'localhost' 改成 listen_addresses = '*'(改過請忽略) 3.重啟服務 ...
  • "點我查看秘籍連載" 頁翻譯:快速地址轉換 雖然操作系統通過頁表也能將虛擬頁翻譯成記憶體中對應的頁幀,但是它仍然很慢。另一方面,如果訪問每個頁都需要操作系統來參與幫忙翻譯,這會頻繁陷入內核,效率是非常低的。所以,這裡再次將任務交給硬體CPU去做。 提示:操作系統將底層任務交給硬體提高效率 前文介紹段的 ...
  • 下麵是我錄製的視頻課程列表,歡迎大家關註。如果大家需要購買,可評論或私信找我拿優惠券噢。 1. "Shell精品進階教程:理解Shell的方方面面" 2. "正則表達式入門教程" ...
  • 現如今的互聯網世界里,代理服務已經十分常見,它通常作為一個第三方或者說中轉站角色替代用戶取得信息或者服務。 根據代理對象的不同,代理服務可以分為正向代理和反向代理。 ...
  • 認識 多表連接查詢 ,我感覺應該是關係型資料庫最能體現其價值和靈活性的地方吧. 我覺得資料庫的作用, 歸納起來無非就是 存儲和查詢 . 一言蔽之,資料庫就是能靈活地存儲和查詢數據. 存儲上, 也是以文件的方式存的(Linux觀點, 一切皆文件), 文件就是存儲數據的載體, 資料庫文件跟其他的數據文件 ...
  • 如果本地自己的電腦沒有安裝Oracle(伺服器端資料庫),那就要單獨安裝HA-Instant Client-v11.2.0.3.0.exe(oracle_client客戶端) 如果本地安裝了Oracle(伺服器端資料庫),就包含了HA-Instant Client-v11.2.0.3.0.exe,不 ...
  • 介紹數據倉庫的的定義及特征,數據倉庫常見的應用和數據倉庫系統的組成部分。 ...
  • 一、DDL、DML、DCL常用語句 1、DDL(Data Definition Language)資料庫定義語言 (1)資料庫模式定義 (2)表定義 2、DML(data manipulation language)資料庫操作語言 3、DCL(Data Control Language)資料庫控制語 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...