MYSQL-JAVAweb1

1.登錄

在黑框中輸入

net start mysql  // 啟動mysql服務
net stop mysql  // 停止mysql服務

1.MySQL數據模型

關系型數據庫:

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

如下圖,訂單信息表客戶信息表 都是有行有列二維表我們將這樣的稱為關系型數據庫。

在這里插入圖片描述
在這里插入圖片描述

*關系數據庫的優點:

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

2.SQL


了解了數據模型后,接下來我們就學習SQL語句,通過SQL語句對數據庫、表、數據進行增刪改查操作。

  • 英文:Structured Query Language,簡稱 SQL
  • 結構化查詢語言,一門操作關系型數據庫的編程語言
  • 定義操作所有關系型數據庫的統一標準
  • 對于同一個需求,每一種數據庫操作的方式可能會存在一些不一樣的地方,我們稱為“方言”

2.1通過語法

  • SQL語句可以單行或多行書寫,以分號結尾。
  • MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
  • 注釋:單行注釋: – 注釋內容 或 #注釋內容(MySQL 特有) 多行注釋: /* 注釋 */

2.2SQL分類

  • DDL(Data Definition Language) : 數據定義語言,用來定義數據庫對象:數據庫,表,列等。DDL簡單理解就是用來操作數據庫,表等
  • DML(Data Manipulation Language) 數據操作語言,用來對數據庫中表的數據進行增刪改。DML簡單理解就對表中數據進行增刪改
  • DQL(Data Query Language) 數據查詢語言,用來查詢數據庫中表的記錄(數據)。DQL簡單理解就是對數據進行查詢操作。從數據庫表中查詢到我們想要的數據。
  • DCL(Data Control Language) 數據控制語言,用來定義數據庫的訪問權限和安全級別,及創建用戶DML簡單理解就是對數據庫進行權限控制。比如我讓某一個數據庫表只能讓某一個用戶進行操作等。

以后我們最常用的是DML和DQL。

4,DDL:操作數據庫

1.查詢所有的數據庫

SHOW DATABASES;

2.創建數據庫

CREATE DATABASE 數據庫名稱;
CREATE DATABASE IF NOT EXISTS 數據庫名稱;

3.刪除數據庫

DROP DATABASE 數據庫名稱;
DROP DATABASE IF EXISTS 數據庫名稱;

4.使用數據庫

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

  • 使用數據庫
> USE 數據庫名稱;
  • 查看當前使用的數據庫
SELECT DATABASE();

5,DDL:操作表

操作表也就是對表進行增(Create)刪(Retrieve)改(Update)查(Delete)。

5.1 查詢表

  • 查詢當前數據庫下所有表名稱

SHOW TABLES;

查詢表結構

DESC 表名稱;

5.2 創建表

  • 創建表

CREATE TABLE 表名 (
字段名1 數據類型1,
字段名2 數據類型2,

字段名n 數據類型n
);

5.3數據類型

在這里插入圖片描述

char : 定長字符串。 優點:存儲性能高 缺點:浪費空間 eg : name char(10)
如果存儲的數據字符個數不足10個,也會占10個的空間 varchar : 變長字符串。 優點:節約空間 缺點:存儲性能底 eg :
name varchar(10) 如果存儲的數據字符個數不足10個,那就數據字符個數是幾就占幾個的空間

5.4 刪除表

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

5.5 修改表

  • 修改表名

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;

7.DML

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

7.1 添加數據

  • 給指定列添加數據
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,);
-- 給指定列添加數據
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,'lisi@itcast.cn','13888888888',1);INSERT INTO stu VALUES (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);-- 批量添加數據
INSERT INTO stu VALUES (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),(2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),(2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);

7.2 修改數據

  • 修改表數據

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

例如:

update stu set sex = '女' where name = '張三';

7.3 刪除數據

  • 刪除數據
DELETE FROM 表名 [WHERE 條件] ;
-- 刪除張三記錄
delete from stu where name = '張三';-- 刪除stu表中所有的數據
delete from stu;

8,DQL:查詢

查詢的完整語法:

SELECT 字段列表
FROM 表名列表 
WHERE 條件列表
GROUP BY分組字段
HAVING分組后條件
ORDER BY排序字段
LIMIT分頁限定

8.1 基礎查詢

8.1.1 語法
  • 查詢多個字段
 SELECT 字段列表 FROM 表名;SELECT * FROM 表名; -- 查詢所有數據* 最好具體到每個列名
  • 去除重復記錄
SELECT DISTINCT 字段列表 FROM 表名;
  • 起別名
AS: AS 也可以省略

8.2 條件查詢

8.2.1 語法
SELECT 字段列表 FROM 表名 WHERE 條件列表;
  • 條件:
    條件列表可以使用以下運算符
    在這里插入圖片描述
8.2.2 條件查詢練習
  • 查詢年齡大于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;
    
8.2.3 模糊查詢練習

模糊查詢使用like關鍵字,可以使用通配符進行占位:
(1)_ : 代表單個任意字符
(2)% : 代表任意個數字符

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

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

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

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

    8.3 排序查詢

8.3.1 語法
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 ;
    

    8.4 聚合函數

8.4.1 概念

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

8.4.2 聚合函數分類
函數名功能
count(列名)統計數量(一般選用不為null的列)
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值
8.4.3 聚合函數語法
SELECT 聚合函數名(列名) FROM;

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

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

    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;
    

    8.5 分組查詢

8.5.1 語法
SELECT 字段列表 FROM 表名 [WHERE 分組前條件限定] GROUP BY 分組字段名 [HAVING 分組后條件過濾];

注意:分組之后,查詢的字段為聚合函數和分組字段,查詢其他字段無任何意義

where 和 having 區別:

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

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

8.6 分頁查詢

8.6.1 語法
SELECT 字段列表 FROM 表名 LIMIT  起始索引 , 查詢條目數;
8.6.2 練習
  • 從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) * 每頁顯示的條數

約束

  • 約束是作用于表中列上的規則,用于限制加入表的數據

    例如:我們可以給id列加約束,讓其值不能重復,不能為null值。

  • 約束的存在保證了數據庫中數據的正確性、有效性和完整性

    添加約束可以在添加數據的時候就限制不正確的數據,年齡是3000,數學成績是-5分這樣無效的數據,繼而保障數據的完整性。

分類:

  • 非空約束: 關鍵字是 NOT NULL:保證列中所有的數據不能有null值。
  • 唯一約束:關鍵字是 UNIQUE:保證列中所有數據各不相同。
  • 主鍵約束: 關鍵字是 PRIMARY KEY:主鍵是一行數據的唯一標識,要求非空且唯一。一般我們都會給沒張表添加一個主鍵列用來唯一標識數據。
    默認約束: 關鍵字是 DEFAULT:保存數據時,未指定值則采用默認值。
  • 外鍵約束: 關鍵字是 FOREIGN KEY:外鍵用來讓兩個表的數據之間建立鏈接,保證數據的一致性和完整性。

外鍵約束:

  • 添加外鍵約束:
-- 創建表時添加外鍵約束
CREATE TABLE 表名(列名 數據類型,[CONSTRAINT] [外鍵名稱] FOREIGN KEY(外鍵列名) REFERENCES 主表(主表列名) 
); 
-- 建完表后添加外鍵約束
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱);
  • 刪除外鍵約束
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87115.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

將POD指定具體機器上運行

在Kubernetes中&#xff0c;你可以通過多種方式將Pod調度到指定的節點&#xff08;機器&#xff09;上運行。以下是幾種常用的方法及其適用場景&#xff1a; 1. NodeSelector&#xff08;簡單標簽匹配&#xff09; 通過標簽選擇器將Pod綁定到具有特定標簽的節點。 步驟 為目…

eNSP實驗一:IPv4編址及IPv4路由基礎

一、實驗目的&#xff1a; 配置各路由器上的物理接口的IP地址并實現互聯互通配置各路由器的 Loopback 的IP地址并實現互聯互通&#xff08;包括備份路由&#xff0c;默認路由&#xff09;圖中三個路由器型號為 AR3620。 二、配置物理接口ip 基礎配置 設備命名<Huawei>…

基于自然語言處理(NLP)的Twitter情感分析系統

本課題致力于構建一個基于自然語言處理&#xff08;NLP&#xff09;與機器學習技術的Twitter情感分析系統&#xff0c;旨在自動識別用戶推文中的主觀情緒傾向&#xff0c;如正面、負面或中性。研究過程中將對海量Twitter文本數據進行預處理&#xff0c;包括去除噪聲、分詞、詞性…

H.264中片數據分割(Slice Data Partitioning)介紹

H.264中**片數據分割&#xff08;Slice Data Partitioning&#xff09;**的解碼機制。讓我為您詳細解析&#xff1a; 1. 片數據&#xff08;Slice Data Partitioning&#xff09;分割的概念 片數據分割是H.264中的一種錯誤恢復機制&#xff0c;通過將片數據分成不同的部分&am…

muduo

好的&#xff0c;我們來深入剖析陳碩老師開發的著名C網絡庫——muduo。它以“簡單、高效、易用”著稱&#xff0c;是學習Linux C高性能網絡編程的絕佳范本。我會盡量詳細、通俗地講解其核心思想、關鍵組件、源碼結構和工作原理。 核心思想&#xff1a;Reactor 模式 (Non-block…

將目錄下所有圖像中非0像素值改為1或者255

圖像二值化處理技術大綱 目標與背景 解釋圖像二值化的意義,分析將非零像素值統一調整為1或255的應用場景(如簡化數據、增強特征、適配模型輸入等)。 核心方法概述 列舉常見圖像格式(如PNG、JPEG)的像素值范圍,說明非零像素的定義(RGB或灰度圖像中的非黑像素)。 方…

Reactor ConnectableFlux支持多訂閱者

在 Reactor 中&#xff0c;ConnectableFlux 是一種用于處理響應式流的機制&#xff0c;它允許你控制何時開始訂閱和數據生成。通常情況下&#xff0c;訂閱者&#xff08;subscriber&#xff09;在訂閱時會立即開始接收數據&#xff0c;但有時你可能希望多個訂閱者“會面”&…

vite + vue 項目下使用 tailwindcss

版本 node: > 18.0.0 vue: 3.5.13 vite: 6.3.1 tailwindcss: 4.1.6 tailwindcss/vite: 4.1.6 tailwindcss ? 細粒度類庫 提供數千個原子級CSS類&#xff08;如 text-center、bg-blue-500、p-4&#xff09;&#x1f9e9; 組合式開發 通過類名組合構建完全自定義的UI&#x…

Hibernate中save與saveOrUpdate的差異解析

在Hibernate中&#xff0c;save()和saveOrUpdate()都是用于持久化對象的方法&#xff0c;但它們的適用場景和行為有顯著差異&#xff1a; 1. save()方法 核心行為&#xff1a; 僅適用于瞬時態&#xff08;Transient&#xff09;對象&#xff08;即新創建、未與Session關聯的對象…

香橙派3B學習筆記14:deb 打包程序_解包前后腳本運行

本文學習如何用deb打包的方式打包自己需要調用系統庫的程序。 然后實現deb解包前后的腳本運行。 目錄 承接上文&#xff1a; 刪除上文遺留的.so文件&#xff1a; 終止ledlight進程&#xff1a; 目標解釋&#xff1a; 創建項目結構&#xff1a; 創建control文件&#xff1a; 創…

nanoGPT復現——prepare拆解(自己構建詞表 VS tiktoken)

在nanoGPT的data文件夾有兩個很相似的文件夾結構&#xff1a;shakespeare和shakespeare-char&#xff0c;這兩種都是對shakespeare數據集的處理&#xff0c;但是shakespeare使用的是tiktoken對文字進行編碼&#xff0c;另一個則是使用自己構建的詞表 一、shakespeare-char&…

macos 安裝 xcode

在 macOS 上安裝 Xcode&#xff08;或者 Xcode Command Line Tools&#xff09;的方法如下&#xff1a; 1. 安裝 Xcode Command Line Tools&#xff08;輕量級&#xff0c;滿足大部分編譯需求&#xff09; 終端命令&#xff1a; xcode-select --install會彈出安裝提示&#x…

大學專業科普 | 云計算、大數據

大數據專業是近年來隨著信息技術發展而興起的熱門學科&#xff0c;專注于從海量、多樣化的數據中提取有價值信息&#xff0c;為各行業提供數據驅動的決策支持。 專業定義 大數據專業旨在培養掌握大數據采集、存儲、管理、分析和應用等核心技術的人才。該專業融合了計算機科學…

本地文件自動提交到倉庫

背景 將本地目錄做一個存儲倉庫&#xff0c;將歸檔的文件放入其中。自動同步到遠程倉庫。 倉庫配置 省略 配置密鑰 用戶可以 git pull \ git push \ git commit 自動 拉取、更新 腳本 文件名&#xff1a;autosave.sh #!/bin/zsh# 設置變量 LOCAL_DIR$1# 進入工作目錄 cd "…

Ubuntu中控制用戶存儲空間配置步驟

目的&#xff0c;限制用戶磁盤空間占用&#xff0c;例如給用戶限制100-150G容量 1.安裝磁盤配額工具 sudo apt-get install -y quota 2.備份并修改/etc/fstab文件&#xff0c;使能支持quota sudo cp /etc/fstab /etc/fstab.bak vim /etc/fstab #寫入如下,usrjquotaaquota.u…

【網絡】Linux 內核優化實戰 - net.ipv4.tcp_rmem 和 net.core.rmem_default 關系

net.ipv4.tcp_rmem 和 net.core.rmem_default 都是 Linux 內核中控制網絡接收緩沖區的參數,但它們的作用范圍、優先級和使用場景存在明顯區別。以下是詳細對比: 核心區別 參數net.ipv4.tcp_rmemnet.core.rmem_default作用協議僅針對 TCP 協議針對 所有網絡協議(TCP、UDP 等…

設計模式精講 Day 14:命令模式(Command Pattern)

【設計模式精講 Day 14】命令模式&#xff08;Command Pattern&#xff09; 文章內容 在“設計模式精講”系列的第14天&#xff0c;我們來學習命令模式&#xff08;Command Pattern&#xff09;。命令模式是一種行為型設計模式&#xff0c;它將請求封裝為對象&#xff0c;從而…

手機射頻功放測試學習(二)——手機線性功放的靜態電流和小信號(S-Parameter)測試

目錄 一、概要 二、LPA的電流測試 1、LPA的泄漏電流測試 手動測試步驟如下: 自動化測試: 2、LPA的靜態電流測試 手動測試步驟如下: 自動化測試: 三、LPA的S-Parameter測試 1、矢量網絡分析儀校準 2、LPA的S參數手動測試步驟: 3、LPA的S參數自動測試步驟: 四…

基礎算法合集-圖論

本文將介紹數據結構圖論部分中常見的算法 單源最短路徑問題(用來計算一個點到其他所有頂點的最短路徑) Dijkstra(n*n) 1. 初始化: 先找出從源點V0到各終點Vk的直達路徑(V0,Vk), 即通過一條弧到達的路徑 2. 選擇: 從這些路徑中找出一條長度最短的路徑(V0,u) 3. 更新: 然后對其余…

vue-i18n 插件打包解析失效問題記錄

vue-i18n 插件打包解析失效問題記錄 開發環境中沒有問題的&#xff0c;但打包發布之后就不行了&#xff0c;顯示的就是模板字符串 // An highlighted block const messages {en: {step: {stepDesc1: Scan,stepDesc2: Analyze,stepDesc3: Result}},zh: {step: {stepDesc1: 掃描…