資料庫、數據表的基本操作及查詢數據

来源:https://www.cnblogs.com/danjinglc/archive/2019/04/01/10637332.html
-Advertisement-
Play Games

資料庫的基本操作 1. 創建資料庫 database_name為要創建的資料庫的名稱 2. 刪除資料庫 database_name為要刪除的資料庫的名稱 3. 資料庫存儲引擎 資料庫存儲引擎是資料庫底層軟體組成,資料庫管理系統(DBMS)使用數據引擎進行創建、查詢、更新和刪除數據操作。 MySQL的 ...


資料庫的基本操作

  1. 創建資料庫 CREATE DATABASE database_name
    database_name為要創建的資料庫的名稱
  2. 刪除資料庫 DROP DATABASE database_name
    database_name為要刪除的資料庫的名稱
  3. 資料庫存儲引擎
    資料庫存儲引擎是資料庫底層軟體組成,資料庫管理系統(DBMS)使用數據引擎進行創建、查詢、更新和刪除數據操作。
    MySQL的核心就是存儲引擎。


    存儲引擎比較
    |功能|MyISAM|Memory|InnoDB|Archive|
    |---|---|---|---|---|
    |存儲限制|256TB|RAM|64TB|None|
    |支持事務|No|No|Yes|No|
    |支持全文索引|Yes|No|No|No|
    |支持數索引|Yes|Yes|Yes|No|
    |支持哈希索引|No|Yes|No|No|
    |支持數據緩存|No|N/A|Yes|No|
    |支持外鍵|No|No|Yes|No|

數據表的基本操作

創建數據表

  1. 創建表的語法形式
    SQL CREATE TABLE<表名> ( 欄位名1 數據類型 [列級別約束條件] [預設值], 欄位名2 數據類型 [列級別約束條件] [預設值], …… [表級別約束條件] );
  2. 使用主鍵約束

    主鍵約束要求主鍵列的數據唯一,並且不允許為空。他能唯一地標識表中的一條記錄,可以結合外鍵來定義不同數據表之間的關係,並且可以加快資料庫查詢的速度。

    1. 單欄位主鍵
      1. 在定義列的同時指定主鍵。 欄位名 數據類型 PRIMARY KEY [預設值]
      2. 在定義完所有列之後指定主鍵。 [CONSTRAINT <約束名>] PRIMARY KEY [欄位名]
    2. 多欄位聯合主鍵
      主鍵由多個欄位聯合組合而成。 PRIMARY KEY [欄位1、欄位2...]
      其位置放置在定義完所有的主鍵之後
  3. 使用外鍵約束
    外鍵用來在兩個表的數據之間建立鏈接,它可以是一列或者多列。一個表可以有一個或多個外鍵。
    [CONSTRAINT<外鍵名>] FOREIGN KEY 欄位1[,欄位2...] REFERENCES<主表名> 主鍵列1[,主鍵列2...]
  4. 使用非空約束
    非空約束指欄位的值不能為空。對於使用了非空約束的欄位,如果用戶在添加數據時沒有指定值,資料庫系統會報錯。 欄位名 數據類型 NOT NULL
  5. 使用唯一性約束
    唯一性約束要求該列唯一,允許為空,但只能出現一個空值。
    唯一約束可以確保一列或者幾列不出現重覆值。
    1. 在定義完列之後直接指定唯一約束。欄位名 數據類型 UNIQUE
    2. 在定義完所有列之後指定唯一約束。[CONSTRAINT<約束名>] UNIQUE(<欄位名>)
  6. 使用預設約束
    預設約束指定某列的預設值。 欄位名 數據類型 DEFAULT 預設值
  7. 設置表的屬性值自動增加
    在資料庫應用中,可以通過為表的主鍵添加 AUTO_INCREMENT關鍵字來實現:當每新增加一條記錄,使該主鍵自動加一。一個表只能有一個欄位使用 AUTO_INCREMENT約束,且該欄位必須為主鍵的一部分。其約束的欄位可以是任何整數類型。
    欄位名 數據類型 AUTO_INCREMENT

查看數據表結構

  1. 查看表基本結構語句
    DESCRIBE 表名; 或者簡寫為 DESC 表名;
  2. 查看表詳細結構語句
    SHOW CREATE TABLE <表名/G>;
    如果不加 /G參數,顯示的結果可能非常混亂,加上參數 /G後,可使顯示結果更加直觀,易於查看。

修改數據表

  1. 修改表名
    ALTER TABLE <舊表名> RENAME [TO] <新表名>;
  2. 修改欄位的數據類型
    ALTER TABLE <表名> MODIFY <欄位名> <數據類型>;
  3. 修改欄位名
    ALTER TABLE <表名> CHANGE <舊欄位名> <新欄位名> <新數據類型>;
  4. 添加欄位
    ALTER TABLE <表名> ADD <新欄位名> <新數據類型> [約束條件] [FIRST|AFTER 已存在欄位名];
  5. 刪除欄位
    ALTER TABLE <表名> DROP <欄位名>;
  6. 修改欄位的排列位置
    ALTER TABLE <表名> MODIFY <欄位1> <數據類型> FIRST|AFTER <欄位2>;
  7. 更改表的存儲引擎
    ALTER TABLE <表名> ENGINE=<更改後的存儲引擎名>;
  8. 刪除表的外鍵約束
    ALTER TABLE <表名> DROP FOREIGN KEY <外鍵約束名>;

刪除數據表

DROP TABLE [IF EXISTS] 表1,表2...表n;

查詢數據

基本查詢語句

SELECT
    {*|<欄位列表>}
    [
        FROM <表1>,<表2>...
        [WHERE <表達式>]
        [GROUP BY <group by definition>]
        [HAVING <expression>[{<operator><expression>}...]]
        [ORDER BY <order by definition>]
        [LIMIT [offset,] <row count>]
    ]
    
 SELECT [欄位1,欄位2,...,欄位n]
 FROM [表或視圖]
 WHERE [查詢條件];

單表查詢

  1. 查詢所有欄位
    SELECT * FROM 表名;
  2. 查詢指定欄位
    SELECT 欄位名1[,欄位名2,...,欄位名n] FROM 表名;
  3. 查詢指定記錄
    SELECT語句中,通過 WHERE子句可以對數據進行過濾。
    SELECT 欄位名1[,欄位名2,...,欄位名n] FROM 表名 WHERE 查詢條件;
  4. IN關鍵字的查詢
    IN操作符用來查詢滿足指定範圍內的條件的記錄,使用 IN操作符,將所有檢索條件用括弧括起來,檢索條件之間用逗號隔開,只要滿足條件範圍內的一個值即為匹配項。
    IN關鍵字前面加上 NOT即可使得查詢的結果正好相反。
  5. BETWEEN AND的範圍查詢
    BETWEEN AND用來查詢某個範圍內的值,該操作符需要有兩個參數,即範圍的開始值和結束。如果欄位值滿足指定的範圍查詢條件,則這些記錄被返回。
    同樣,在BETWEEN AND關鍵字前面加上 NOT即可使得查詢的結果正好相反。
  6. LIKE的字元匹配查詢
    LIKE關鍵字即是使用通配符來進行匹配查找。通配符是一種在SQL的 WHERE條件子句中擁有特殊意思的字元,可以和 LIKE一起使用的通配符有 %_
    百分號通配符 %,匹配任意長度的字元,甚至包括零字元。
    下劃線通配符 _ ,一次只能匹配任意一個字元。
  7. 查詢空值
    空值不同於0,也不同於空字元串。空值一般表示數據未知、不適用或將在以後添加數據。
    SELECT語句中使用 IS NULL子句,可以查詢某欄位內容為空記錄。
  8. AND的多條件查詢
    AND主要用於 WHERE子句中,用來鏈接兩個甚至多個查詢條件,表示所有的條件都需要滿足才會返回值。
  9. OR的多條件查詢
    OR也主要用於 WHERE子句中,用來鏈接兩個甚至多個查詢條件,表示所有的條件僅需滿足其中之一項便會返回值。
  10. 查詢結果不重覆
    SELECT語句中,使用 DISTINCT關鍵字來指示MySQL消除重覆的記錄。
    SELECT DISTINCT 欄位名 FROM 表名;
  11. 對查詢結果排序
    ORDER BY語句來對查詢的結果進行排序。
    在後面添加 DESC表示降序排序
    在後面添加 ASC或預設,表示升序排序
  12. 分組查詢
    在MySQL中使用 GROUP BY來對數據進行分組
    [GROUP BY 欄位] [HAVING <條件表達式>] [WITH ROLLUP]
    HAVING 關鍵字用來過濾數據,因為 WHERE不能和 GROUP BY混用
    WITH ROLLUP關鍵字是在所有查詢出的記錄之後增加一條記錄,該記錄計算查詢出的所有記錄的總和,即統計記錄數量。但是ROLLUP和能夠與 GROUP BY同時使用的ORDER BY不能同時使用。
  13. 使用 LIMIT限制查詢結果的數量
    LIMIT [位置偏移量,] 行數

使用集合函數查詢

函數 作用
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值的和

連接查詢

  1. 內連接查詢
    在內連接查詢中,只有滿足條件的記錄才能出現在結果關係中。兩個表之間的關係通過 (INNER) JOIN指定。 使用這種語法的時候,連接的條件使用 ON子句給出,而不是用 WHERE
  2. 外連接查詢
    1. LEFT JOIN左連接
      返回包括左表中的所有記錄和右表中連接欄位相等的記錄。
    2. RIGHT JOIN右連接
      返回包括右表中的所有記錄和左表中連接欄位相等的記錄。
  3. 複合條件連接查詢
    複合條件連接查詢是在連接查詢的過程中,通過添加過濾條件,限制查詢的結果,使查詢的結果更加準確。

子查詢

子查詢指一個查詢語句嵌套在另一個查詢語句內部的查詢。

  1. ANYSOME關鍵字的子查詢
    ANYSOME關鍵字是同義詞,表示滿足其中任一條件,它們允許創建一個表達式對子查詢的返回值列表進行比較,只要滿足內層子查詢中的任何一個比較條件,就返回一個結果作為外層查詢的條件。
  2. ALL關鍵字的子查詢
    使用 ALL時,需要同時滿足所有內層查詢的條件。
  3. EXISTS關鍵字的子查詢
    EXISTS關鍵字後面的參數是一個任一的子查詢,系統對子查詢進行運算以判斷它是否返回行,如果至少返回一行,那麼 EXISTS的結果為 true,此時外層查詢語句將進行查詢;如果子查詢沒有返回任何行,那麼 EXISTS的結果為 false,此時外層語句不進行查詢。
  4. IN關鍵字的子查詢
    使用 IN關鍵字進行子查詢時,內層查詢語句僅僅返回一個數據列,這個數據列里的值將提供給外層查詢語句進行比較操作。當外層查詢語句內只要有一個內層查詢語句返回的數據列中的數據時,則判斷為滿足條件,外層查詢語句將進行查詢。
  5. 帶比較運算符的子查詢
    子查詢可以使用如 '<','<=','=','>','>=','!='等比較運算符。

合併查詢結果

利用 UNION關鍵字,可以給出多條 SELECT語句,並將他們的結果組合成單個結果集。合併時,兩個表對應的列數和數據類型必須相同。各個 SELECT語句之間使用 UNIONUNION ALL關鍵字分割。 UNION不適用關鍵字 ALL,執行的時候刪除重覆的記錄,所有返回的行都是唯一的;使用關鍵字 ALL的作用時不刪除重覆行也不對結果進行自動排序。

為表和欄位取別名

  1. 為表取別名
    表名 [AS] 表別名
  2. 為欄位取別名
    列名 [AS] 列別名

使用正則表達式查詢

MYSQL中使用 REGEXP關鍵字指定正則表達式的字元匹配模式。

正則表達式常用字元匹配列表
|選項|說明|
|:---:|---|
|^|匹配文本的開始字元|
|$|匹配文本的結束字元|
|.|匹配任何單子符|
|*|匹配零個或多個在他前面的字元|
|+|匹配前面的字元1次或多次|
|<字元串>|匹配保護指定的字元串的文本|
|[字元集合]|匹配字元集合中的任何一個字元|
|[^]|匹配不在括弧中的任何字元|
|字元串{n,}|匹配前面的字元串至少n次|
|字元串{n,m}|匹配前面的字元串至少n次,至多m次|


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • systemctl enable cockpit 時,會出現如下錯誤: 修改cockpit.service 文件為如下所示: 添加 [Install] 配置單元,即可解決問題。 參考鏈接:https://unix.stackexchange.com/questions/337860/service- ...
  • 1.echo 用於輸出字元串或者變數的值 2.date 顯示及設置系統的時間和日期,格式為 “date [選項][+指定格式]”,輸入以“+”號開頭的參數,及可按照指定格式輸出 3.reboot 用於重啟系統,必須為root管理員 4.poweroff 用於關閉系統,必須為root管理員 5.wge ...
  • By combining the NTSTATUS into a single 32-bit numbering space, the following NTSTATUS values are defined. Most values also have a defined default mes ...
  • 語法: Cscript Prncnfg {-g | -t | -x | -?} [-S <ServerName>] [-P <PrinterName>] [-z <NewPrinterName>] [-u <UserName>] [-w <Password>] [-r <PortName>] [-l ...
  • 我的機器是CUDA16.04的,之前裝過CUDA10.0,因為一些原因,現在需要安轉CUDA9.0。 1.首先https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target ...
  • 1.索引如果沒有特別指明類型,一般是說b樹索引,b樹索引使用b樹數據結構存儲數據,實際上很多存儲引擎使用的是b+樹,每一個葉子節點都包含指向下一個葉子節點的指針,從而方便葉子節點的範圍遍歷 2.底層的存儲引擎也可能使用不同的存儲結構,比如NDB集群存儲引擎使用了T樹,InnoDB使用的是B+樹 3. ...
  • 資料庫什麼是資料庫就是存儲數據的倉庫(容器)存儲數據的方式1.變數 無法永久存儲2.文件處理 ,可以永久存儲文件處理存在的弊端: 1.文件處理速度慢 2.文件只能在自己的電腦上讀寫 無法被共用(區域網除外)單台電腦的性能終歸是有限的1.升級你的硬體設備 提升幅度有限 垂直擴展2.伺服器集群 分佈 ...
  • 在筆記本和PC上面使用Mysql8.0.11免安裝版本,均遇到此問題,記性不太好,現做下筆記。 1.cmd下,先關掉已啟動的mysql服務,使用命令:net stop mysql 2.步驟1的cmd視窗a不關閉,重新開1個cmd視窗b,輸入:mysqld --console --skip-grant ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...