mysql資料庫和表的基礎操作

来源:https://www.cnblogs.com/e-link/archive/2022/12/11/16964762.html
-Advertisement-
Play Games

MySQL數據模型 關係型資料庫是建立在關係模型基礎上的資料庫,簡單說,關係型資料庫是由多張能互相連接的 二維表 組成的資料庫 關係型資料庫的優點: 都是使用表結構,格式一致,易於維護。 使用通用的 SQL 語言操作,使用方便,可用於複雜查詢。 關係型資料庫都可以通過SQL進行操作,所以使用方便。 ...


MySQL數據模型

關係型資料庫是建立在關係模型基礎上的資料庫,簡單說,關係型資料庫是由多張能互相連接的 二維表 組成的資料庫 

關係型資料庫的優點:

  • 都是使用表結構,格式一致,易於維護。
  • 使用通用的 SQL 語言操作,使用方便,可用於複雜查詢。
    • 關係型資料庫都可以通過SQL進行操作,所以使用方便。
    • 複雜查詢。現在需要查詢001號訂單數據,我們可以看到該訂單是1號客戶的訂單,而1號訂單是李聰這個客戶。以
    • 後也可以在一張表中進行統計分析等操作。
  • 數據存儲在磁碟中,安全。 

SQL分類 

  • DDL(Data Definition Language) : 數據定義語言,用來定義資料庫對象:資料庫,表,列等

    DDL簡單理解就是用來操作資料庫,表等

  • DML(Data Manipulation Language) 數據操作語言,用來對資料庫中表的數據進行增刪改

    DML簡單理解就對錶中數據進行增刪改

  • DQL(Data Query Language) 數據查詢語言,用來查詢資料庫中表的記錄(數據)

    DQL簡單理解就是對數據進行查詢操作。從資料庫表中查詢到我們想要的數據。

  • DCL(Data Control Language) 數據控制語言,用來定義資料庫的訪問許可權和安全級別,及創建用戶

    DML簡單理解就是對資料庫進行許可權控制。比如我讓某一個資料庫表只能讓某一個用戶進行操作等。

註意: 以後我們最常操作的是 DML 和 DQL ,因為我們開發中最常操作的就是數據。 

DDL:操作資料庫 

查詢所有的資料庫

  • 運行上面語句效果如下:
SHOW DATABASES;

創建資料庫

  • 創建資料庫

CREATE DATABASE 資料庫名稱;

 

而在創建資料庫的時候,我並不知道datastu資料庫有沒有創建,直接再次創建名為db1的資料庫就會出現錯誤。

  • 創建資料庫(判斷,如果不存在則創建)

CREATE DATABASE IF NOT EXISTS 資料庫名稱;

刪除資料庫

  • 刪除資料庫

DROP DATABASE 資料庫名稱;
  • 刪除資料庫(判斷,如果存在則刪除)

DROP DATABASE IF EXISTS 資料庫名稱;

使用資料庫

資料庫創建好了,要在資料庫中創建表,得先明確在哪兒個資料庫中操作,此時就需要使用資料庫。

  • 使用資料庫

USE 資料庫名稱;
  • 查看當前使用的資料庫

SELECT DATABASE();

DDL:操作表

查詢表

  • 查詢當前資料庫下所有表名稱

SHOW TABLES;
  • 查詢表結構

DESC 表名稱;

表的增刪改查

  • 創建表

CREATE TABLE 表名 (
    欄位名1  數據類型1,
    欄位名2  數據類型2,
    …
    欄位名n  數據類型n
);
​

註意:最後一行末尾,不能加逗號

create table tb_user (
	id int,
    username varchar(20),
    password varchar(32)
);

數據類型

MySQL 支持多種類型,可以分為三類:

  • 數值

    tinyint : 小整數型,占一個位元組
    int :    大整數類型,占四個位元組
        eg : age int
    double : 浮點類型
        使用格式: 欄位名 double(總長度,小數點後保留的位數)
        eg : score double(5,2)
  • 日期

    date :     日期值。只包含年月日
        eg :   birthday date : 
    datetime : 混合日期和時間值。包含年月日時分秒
  • 字元串

    案例:

    需求:設計一張學生表,請註重數據類型、長度的合理性
        1. 編號
        2. 姓名,姓名最長不超過10個漢字
        3. 性別,因為取值只有兩種可能,因此最多一個漢字
        4. 生日,取值為年月日
        5. 入學成績,小數點後保留兩位
        6. 郵件地址,最大長度不超過 64
        7. 家庭聯繫電話,不一定是手機號碼,可能會出現 - 等字元
        8. 學生狀態(用數字表示,正常、休學、畢業...)

    語句設計如下:

  

create table student (
	id int,
    name varchar(10),
    gender char(1),
    birthday date,
    score double(5,2),
    email varchar(15),
    tel varchar(15),
    status tinyint
);

刪除表

  • 刪除表

DROP TABLE 表名;
  • 刪除表時判斷表是否存在

DROP TABLE IF EXISTS 表名;

修改表

  • 修改表名

ALTER TABLE 表名 RENAME TO 新的表名;
​
-- 將表名student修改為stu
alter table student rename to stu;
  • 添加一列

ALTER TABLE 表名 ADD 列名 數據類型;
​
-- 給stu表添加一列address,該欄位類型是varchar(50)
alter table stu add address varchar(50);
  • 修改數據類型

ALTER TABLE 表名 MODIFY 列名 新數據類型;
​
-- 將stu表中的address欄位的類型改為 char(50)
alter table stu modify address char(50);
  • 修改列名和數據類型

ALTER TABLE 表名 CHANGE 列名 新列名 新數據類型;
​
-- 將stu表中的address欄位名改為 addr,類型改為varchar(50)
alter table stu change address addr varchar(50);
  • 刪除列

ALTER TABLE 表名 DROP 列名;
​
-- 將stu表中的addr欄位 刪除
alter table stu drop addr;

DML

DML主要是對數據進行增(insert)刪(delete)改(update)操作。

添加數據

  • 給指定列添加數據

INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
  • 給全部列添加數據

INSERT INTO 表名 VALUES(值1,值2,…);
  • 批量添加數據

INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;

 

  • 練習

為了演示以下的增刪改操作是否操作成功,故先將查詢所有數據的語句介紹給大家:

select * from stu;

 

-- 給指定列添加數據
INSERT INTO stu (id, NAME) VALUES (1, '張三');
-- 給所有列添加數據,列名的列表可以省略的
INSERT INTO stu (id,NAME,sex,birthday,score,email,tel,STATUS) VALUES (2,'李四','男','1999-11-11',88.88,'[email protected]','13888888888',1);
​
INSERT INTO stu VALUES (2,'李四','男','1999-11-11',88.88,'[email protected]','13888888888',1);
​
-- 批量添加數據
INSERT INTO stu VALUES 
    (2,'李四','男','1999-11-11',88.88,'[email protected]','13888888888',1),
    (2,'李四','男','1999-11-11',88.88,'[email protected]','13888888888',1),
    (2,'李四','男','1999-11-11',88.88,'[email protected]','13888888888',1);

修改數據

  • 修改表數據

UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 條件] ;

註意:

  1. 修改語句中如果不加條件,則將所有數據都修改!

  2. 像上面的語句中的中括弧,表示在寫 sql 語句中可以省略這部分

 

  • 練習

    • 將張三的性別改為女

      update stu set sex = '女' where name = '張三';
    • 將張三的生日改為 1999-12-12 分數改為99.99

      update stu set birthday = '1999-12-12', score = 99.99 where name = '張三';
    • 註意:如果update語句沒有加where條件,則會將表中所有數據全部修改!

      update stu set sex = '女';

刪除數據

  • 刪除數據

DELETE FROM 表名 [WHERE 條件] ;
  • 練習

-- 刪除張三記錄
delete from stu where name = '張三';
​
-- 刪除stu表中所有的數據
delete from stu;

基礎查詢

語法

  • 查詢多個欄位

SELECT 欄位列表 FROM 表名;
SELECT * FROM 表名; -- 查詢所有數據
  • 去除重覆記錄

SELECT DISTINCT 欄位列表 FROM 表名;
  • 起別名

AS: AS 也可以省略

 

 練習

  • 查詢name、age兩列

    select name,age from stu;
  • 查詢所有列的數據,列名的列表可以使用 * 替代

    select * from stu;
  • 查詢地址信息

    select address from stu;

    從上面的結果我們可以看到有重覆的數據,我們也可以使用 distinct 關鍵字去重重覆數據。

  • 去除重覆記錄

    select distinct address from stu;
  • 查詢姓名、數學成績、英語成績。並通過as給math和english起別名(as關鍵字可以省略)

    select name,math as 數學成績,english as 英文成績 from stu;
    select name,math 數學成績,english 英文成績 from stu;

條件查詢

 語法

SELECT 欄位列表 FROM 表名 WHERE 條件列表;
  • 條件

    

條件查詢練習

  • 查詢年齡大於20歲的學員信息

    select * from stu where age > 20;
  • 查詢年齡大於等於20歲的學員信息

    select * from stu where age >= 20;
  • 查詢年齡大於等於20歲 並且 年齡 小於等於 30歲 的學員信息

    select * from stu where age >= 20 &&  age <= 30;
    select * from stu where age >= 20 and  age <= 30;

    上面語句中 && 和 and 都表示並且的意思。建議使用 and 。

    也可以使用 between ... and 來實現上面需求

    select * from stu where age BETWEEN 20 and 30;
  • 查詢入學日期在'1998-09-01' 到 '1999-09-01' 之間的學員信息

    select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
  • 查詢年齡等於18歲的學員信息

    select * from stu where age = 18;
  • 查詢年齡不等於18歲的學員信息

    select * from stu where age != 18;
    select * from stu where age <> 18;
  • 查詢年齡等於18歲 或者 年齡等於20歲 或者 年齡等於22歲的學員信息

    select * from stu where age = 18 or age = 20 or age = 22;
    select * from stu where age in (18,20 ,22);
  • 查詢英語成績為 null的學員信息

    null值的比較不能使用 = 或者 != 。需要使用 is 或者 is not

    select * from stu where english = null; -- 這個語句是不行的
    select * from stu where english is null;
    select * from stu where english is not null;

模糊查詢練習

模糊查詢使用like關鍵字,可以使用通配符進行占位:

(1)_ : 代表單個任意字元

(2)% : 代表任意個數字元

  • 查詢姓'馬'的學員信息

    select * from stu where name like '馬%';
  • 查詢第二個字是'花'的學員信息

    select * from stu where name like '_花%';
  • 查詢名字中包含 '德' 的學員信息

    select * from stu where name like '%德%';

排序查詢

語法

SELECT 欄位列表 FROM 表名 ORDER BY 排序欄位名1 [排序方式1],排序欄位名2 [排序方式2] …;

上述語句中的排序方式有兩種,分別是:

  • ASC : 升序排列 (預設值)

  • DESC : 降序排列

註意:如果有多個排序條件,當前邊的條件值一樣時,才會根據第二條件進行排序

 

8.3.2 練習

  • 查詢學生信息,按照年齡升序排列

    select * from stu order by age ;
  • 查詢學生信息,按照數學成績降序排列

    select * from stu order by math desc ;
  • 查詢學生信息,按照數學成績降序排列,如果數學成績一樣,再按照英語成績升序排列

    select * from stu order by math desc , english asc ;

聚合函數

將一列數據作為一個整體,進行縱向計算。

聚合函數分類

函數名 功能
count(列名) 統計數量(一般選用不為null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值

聚合函數語法

SELECT 聚合函數名(列名) FROM 表;

註意:null 值不參與所有聚合函數運算

練習

  • 統計班級一共有多少個學生

    select count(id) from stu;
    select count(english) from stu;

    上面語句根據某個欄位進行統計,如果該欄位某一行的值為null的話,將不會被統計。所以可以在count(*) 來實現。* 表示所有欄位數據,一行中也不可能所有的數據都為null,所以建議使用 count(*)

    select count(*) from stu;
  • 查詢數學成績的最高分

    select max(math) from stu;
  • 查詢數學成績的最低分

    select min(math) from stu;
  • 查詢數學成績的總分

    select sum(math) from stu;
  • 查詢數學成績的平均分

    select avg(math) from stu;
  • 查詢英語成績的最低分

    select min(english) from stu;

     

分組查詢

語法

SELECT 欄位列表 FROM 表名 [WHERE 分組前條件限定] GROUP BY 分組欄位名 [HAVING 分組後條件過濾];

註意:分組之後,查詢的欄位為聚合函數和分組欄位,查詢其他欄位無任何意義

 

練習

  • 查詢男同學和女同學各自的數學平均分

    select sex, avg(math) from stu group by sex;

    註意:分組之後,查詢的欄位為聚合函數和分組欄位,查詢其他欄位無任何意義

     

    select name, sex, avg(math) from stu group by sex;  -- 這裡查詢name欄位就沒有任何意義
  • 查詢男同學和女同學各自的數學平均分,以及各自人數

    select sex, avg(math),count(*) from stu group by sex;
  • 查詢男同學和女同學各自的數學平均分,以及各自人數,要求:分數低於70分的不參與分組

    select sex, avg(math),count(*) from stu where math > 70 group by sex;
  • 查詢男同學和女同學各自的數學平均分,以及各自人數,要求:分數低於70分的不參與分組,分組之後人數大於2個的

    select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;

     

where 和 having 區別:

  • 執行時機不一樣:where 是分組之前進行限定,不滿足where條件,則不參與分組,而having是分組之後對結果進行過濾。

  • 可判斷的條件不一樣:where 不能對聚合函數進行判斷,having 可以。

 

分頁查詢

語法

SELECT 欄位列表 FROM 表名 LIMIT  起始索引 , 查詢條目數;

註意: 上述語句中的起始索引是從0開始

 

練習

  • 從0開始查詢,查詢3條數據

    select * from stu limit 0 , 3;
  • 每頁顯示3條數據,查詢第1頁數據

    select * from stu limit 0 , 3;
  • 每頁顯示3條數據,查詢第2頁數據

    select * from stu limit 3 , 3;
  • 每頁顯示3條數據,查詢第3頁數據

    select * from stu limit 6 , 3;

從上面的練習推導出起始索引計算公式:

起始索引 = (當前頁碼 - 1) * 每頁顯示的條數

本文來自博客園,作者:link-零,轉載請註明原文鏈接:https://www.cnblogs.com/e-link/p/16964762.html❤❤❤


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

-Advertisement-
Play Games
更多相關文章
  • 枯燥的編程中總得有些樂趣,今天我們不談論那些高深的技能,教你幾個在編程中的奇技淫巧,說不定在某些時候還能炫耀一番呢。 1、找到最大值和最小值 不使用 if else switch 和三元運算符,在給定的三元組中找到最大值和最小值:比如給定 3,14,8,在不使用 if else switch 和三元 ...
  • 目錄 一.OpenGL ES 圖像透明度 1.原始圖片 2.效果演示 二.OpenGL ES 圖像透明度源碼下載 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES ...
  • 通過前面的學習,我們已經知道,怎麼將本地自己製作的鏡像發佈到阿裡雲遠程鏡像倉庫中去。但是在實際工作開發中,一般,我們都是將公司的鏡像發佈到公司自己搭建的私服鏡像倉庫中,那麼一個私服的鏡像倉庫怎麼搭建?怎麼將自己的鏡像推送到私服倉庫中呢?怎麼驗證是否成功呢?本文咱們就一起來學學怎麼將鏡像推送到私服鏡像 ...
  • 痞子衡嵌入式半月刊: 第 68 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • TencentOS Tiny AIoT 應用創新大賽是騰訊 TencentOS 團隊聯合恩智浦半導體、安謀科技(Arm China)發起的線上開發者活動,主要面向中小企業嵌入式工程師、廣大嵌入式開發者、物聯網愛好者、創客團隊等,號召廣大開發者能參與到國內開源項目中,通過開源協同,基於 Tencent ...
  • 做I2S輸出用了PT8211(實際上買到的絲印是GH8211), 雙聲道, LSB格式, 工作正常但是輸出功率非常低, 喇叭聲音要貼近了才能勉強聽到, 所以打算做一個PT8211帶功放的I2S模塊. 最開始用的是PT8211 + LM386 * 2, 能正常工作就是LM386的電壓要求比較高, 只能... ...
  • 第二十四章 使用游標 本章將介紹什麼是游標以及如何使用游標 游標 之前的select語句檢索出來的數據,沒有辦法得到第一行或者下一行 有時,需要在檢索出來的行中前進或後退一行或多行。這就是使用游標的原因。 游標(cursor)是一個存儲在MySQL伺服器上的資料庫查詢,它不是一條SELECT語句,而 ...
  • 之前安裝MYSQL8.0的時候安裝的是綠色版,在cmd中配置完所有參數之後,在連接SQLyog的時候卻報出了以下錯誤 翻譯一下大致的意思為:客戶端不支持伺服器請求的身份驗證協議;考慮升級MYSQL客戶端 這是因為MYSQL8.0之後更換了加密規則為caching_sha2_password,8.0之 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...