MySQL數據庫中篇

#作者:允砸兒

#日期:乙巳青蛇年? 四月初九

筆者繼續帶朋友們了解mysql數據庫中篇的內容。多了不說,少了不嘮,咱們直接就開寫。

書接上回筆者在上篇中介紹了什么是數據庫和數據庫的一些基礎的概念,以及mysql數據庫的內容。接下來筆者以navicat作為工具來編輯數據庫和最重要的增刪查改的命令語句。

表約束

什么是表約束:是對表中的數據進行限定,保證數據的正確性、有效性和完整性。

1、主鍵約束:確保主鍵列的每一個值都唯一,主鍵列不能為NULL(空)。主鍵primary? key :用于確保表中的每一行都有可以識別自己的一列或多列。

2、外鍵約束:是用來維護數據庫表之間數據一致性和完整性的一種機制。它指定了一個表中的列(或列的組合)必須在另一個表的主鍵或唯一鍵列中有對應的值。

通過外鍵約束可以確保在一個表(稱為子表或從表)中的值在另一個表(稱為父表或主表)中已經存在,從而防止孤立數據的產生。外鍵foreign? key:是一個主表聯系另一張表中以做聯結,可以一對一,一對多,多對多。

索引

什么是索引?

為了在一個數據表里檢索某個特定的記錄,或者提取一系列數據記錄,MySQL必須把這個數據表里的所有數據記錄都搜索一遍。如果數據表的體積比較龐大,在遇到這樣一些查詢的時候性能就會顯著的下降。為解決性能下降的問題可以為查詢所涉及的數據列創建并使用一個索引。

#比如:為了解決查詢速度慢的問題,我們會使用索引,加快檢索速度的操作數據修改變得更快。就像書籍的目錄一樣。

索引的分類

1、普通索引:不唯一的可以為唯空

2、唯一索引:可以唯空的但是唯一的

3、主索引:又唯一又不能唯空

選項和屬性

1、AUTO _INCREMENT(自增):用于為表中的某一列(通常是主鍵列)自動生成唯一的遞增值。

2、NULL(為空)

3、NOT NULL(不為空)非空約束,用于約束該字段的值不能為空。

4、DEFAULT(默認)

SQL介紹

首先用Windows自帶的黑窗口連接? mysql -u root -p,或者直接用navicat直接連接

SQL-結構化查詢語言

1、數據定義語言(DDL):用于創建和修改數據庫對象(如表和索引)的結構,如creat、alter、drop等語句。

2、數據操縱語言(DML):用于數據據庫中的數據進行新增、修改、刪除等操作,如:insert、update、delete等語句。

3、數據查詢語言(DQL):用于對數據進行查詢操作。如:select語句。

4、數據控制語言(DCL):用于控制用戶對數據的訪問權限,如:grant和revoke語句。

一、數據定義語言(DDL)

1、注釋:單行注釋:? ?#? ?

? ? ? ? ? ? ? ? ?單行注釋:-- (減減空格)

? ? ? ? ? ? ? ? ?多行注釋:/*? ?內容? */

(筆者在學習的時候我的老師告訴我注釋內容很重要,要養成一個好習慣,還有一個sql漏洞就是關于注釋的,筆者會在后面講。)

2、新建數據庫:

creat database (數據庫名);創建數據庫

creat database if not exists (數據庫名); if判斷,如果不存在則創建庫

#筆者在這里犯過很多小錯誤,1、database沒有s。2、utf-8 _ci是可以不區分大小寫3、記住必須得有;結尾,但是如果只運行一行可以不加;(分號)4、一定要是英文,字符、語句都必須是英文的。

3、字符集:

字符集(Character Set)在MySQL中是指一套用于存儲、處理和檢索文本數據的字符和編碼規則。它定義了數據庫中可以使用的字符集合,以及這些字符如何映射到數字編碼上。

筆者將創建數據庫和指定字符集結合一下

create database (數據庫名)characterset(字符集);

修改數據庫的字符集:

alter database? (數據庫名) characterset(字符集);

4、查看數據庫的字符集:

show create database (數據庫名);

? ? ?刪除數據庫(刪庫跑路):

drop database (數據庫名);

? ? 使用數據庫:

use (數據庫名);

以上內容筆者簡單寫一下,下面我們就先創建一個數據庫,隨后在數據庫里面創建表。

在數據庫里面創建表

筆者在這里講一下如何用命令創建數據表,也可以直接在navicat直接創建(可視化的還是比較簡單的),筆者在寫一下建表要用到的概念,數字(int),漢字,英文(字符串varchar),數值,價格(double),日期 (data)......

-- 查詢所有的數據表

show databases ;

-- 創造一個名字為xuesheng的表

create database xuesheng;

-- 查詢一下所有的表

show databases ;

-- 改變數據表的字符類型

alter database xuesheng characterset set utf8mb4;

-- 創建字段,在xuesheng數據表中.注意需要給varachar后面添加長度

creat table product (

id int,

p_name varachar(20),

price double,

stock int,

insert_time data

);

-- 查看表結構

desc product;

-- 修改表名字

alter table product rename to tet;

-- 修改數據類型

alter table tet modify p_name varachar(20)

-- 如果沒有設置主鍵需要在編輯器里面留一個id位置

insert into tet (name,price,stock,insert time) values('電腦’,99,50,'2025-9-10’),('顯示器’,199.99,50,'2025-9-18'),(智能手表’,99.599,58,'2025-9-10')('鼠標',99.899,50,'2025-9-10');

-- 添加所有字段

insert into tet values?('電腦',99,50,'2025-9-10');

-- 如果給一個字段寫不同值,讓每一個值都是不同行的,用,(逗號)隔開是分行。

insert into tet(name)values('ss''bb')

select * from tet

-- 修改數據,update 表名字 set 修改后的東西 條件 where id=2這是唯一的數據因為他是主鍵(這里面寫唯一的數據)

update tet set name='電冰箱’where id=2

update tet set price=10 where id=4

select * from tet

-- 刪除數據

delete from tet where id=6;

-- 查詢表

select * from tet;

select id,name,price from tet

簡單的建完了一張表,然后把數據存在了數據庫表中,這里面有一個小知識,不能有一樣的名字,出現一樣的名字會報錯。

二、數據庫操縱語言(DML)

1、insert into 插入數據

insert into(字段) values();#字段是mysql服務器架構第一層,#字段不能用單引號去加,應該用反引號``。

數據庫的架構第一層是dbms,第二層是數據庫,第三層是數據表,最后是字段。表名、字段名都可以是反引號,值需要單引號雙引號去做

2、updata? 修改數據

3、delete? 刪除數據

三、數據查詢語言(DQL)

-- 查詢數據表

select (列名) from (表名);

--?查詢整個表

select * from `tet`

-- 條件查詢

select (列名) from(表名) where (條件);

-- 模糊查詢

select (列名) form (表名)where (列名) like ‘’(%:匹配零個或多個字符:_:匹配單個字符。)

-- 聚合查詢

1、count():計算行數

比如:查詢整個表的行數直接會寫在后面
? ? ? ?select count(*) from tet;

2、max():返回數值列中的最大值

比如:查詢表中的最高價格

select max(price) from tet;

3、min():返回數值列中的最小值

4、?sum():計算數值列的總和。

5、?avg():計算數值列的平均值。

***group_concat() ?

它是mysql當中的聚合函數,它允許我們將多行的字符串組合成一個字符串,非常方便我們輸出。

比如:查詢名字和價格合體在一起

select group_concat(name,'-',price) from tet;

-- 排序查詢

select(列) from(表) order by (列) desc/asc;(asc 為升序,desc為降序)

***group by? ?用于結合聚合函數,根據一個或多個列對結果集進行分組

-- 分頁查詢

select * from 表名 limit (頁碼-1) *每頁數量,每頁數量;

-- mysql表關系

1、一對一表關系:

一對一(1:1)表關系是一種較為特殊的表關系,表示一個表中的一條記錄與另一個表中的一條記錄有唯一的對應關系。這種關系通常用于將一個表的某些列分離到一個新的表中以便保持數據的清晰性和模塊化。

2、一對多表關系:

這意味著在一個表中,可以有多個記錄與另一個表中的單個記錄相關聯。常用于表示兩個表之間的連接,其中一個表中的多行可以與另 一個表中的單行相關聯。這種關系通常通過外鍵(ForeignKey)來實現。

-- 多表查詢

1、union查詢:

用于合并兩個或多個select語句的結果集,同時去處重復的記錄。每個select語句必須擁有相同數量的列,列的數據類型也必須兼容。union默認為union all,但union all會包含所有的重復記錄,而union會去除重復記錄。

比如:select * from person union select name,price,stock,id from tet;

2、子查詢:

子查詢是一種在sql語言中嵌套查詢下層的程序模塊。當一個查詢是另一個查詢的條件時,這個被嵌套的查詢就會被稱為子查詢。子查詢也被稱為內查詢或內部選擇,而包含的語句則被稱為主查詢或外部查詢。

比如:select name,age from person where age=(select max(age) from person);

數據庫加固

筆者用通俗的語言寫一下什么是數據庫加固,它是一個非常復雜的工作,他是去保護數據庫的安全,去解決它存在的一些安全問題,每一種安全問題做一些方案,保證業務系統穩定的運行。

怎么樣加固呢?筆者老師當時交的是6種,數據庫加固有非常多的方法,朋友們可以去其他大神那里學習一下,筆者在這里就簡單的寫一下。

1、強密碼---復雜的密碼
比如:root的密碼就是弱口令(數字大小寫密碼)

2、修改賬號名

比如:修改賬號root賬號名(但是不建議大家嘗試阿,筆者有一款游戲的安全鎖密碼給忘了手機號也換了導致交易不了東西,悲!!!)

3、禁止遠程連接數據庫

update user set host=‘localhaost’ where user=‘joker’and ?host=‘%’

4、關閉端口

默認端口3306,nmap可以掃描端口,定期修改數據庫端口or不開mysql端口

5、安裝最新補丁

select version()

6、web應用防火墻

買一些數據庫審計設備,這需要強大的財力。

總結筆者把數據庫里面最基礎的知識已經寫完,數據庫后篇內容筆者會結合php與數據庫連接。在淺淡一下sql注入。遇到了學習瓶頸不要放棄,可以聽聽紅歌,看看以前的紅書,頹廢的感覺和負能量一掃而空。最后,希望和大家一起努力,一起變得更強。

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

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

相關文章

AI如何重塑DDoS防護行業?六大變革與未來展望

隨著AI技術的深度滲透,DDoS防護行業正經歷一場從“規則驅動”到“智能驅動”的范式革命。傳統依賴靜態閾值和人工規則的防御模式已難以應對新型攻擊,而AI的引入不僅提升了檢測精度,更重構了防護體系的底層邏輯。以下是AI帶來的六大核心變革及…

五一作業-day04

文章目錄 1. **ps -ef是顯示當前系統進程的命令,統計下當前系統一共有多少進程**2. **last命令用于顯示所用用戶最近1次登錄情況,awk可以取出某一列,現在要取出last命令第1列并去重統計次數**3. **secure日志是用戶的登錄日志,過濾出secure日志中的Failed password的次數(用課堂…

抽獎系統(基于Tkinter)

一、抽獎規則及使用方法 抽獎規則: 從1-138個號碼中隨機抽獎,共進行n輪抽獎,每個號碼僅有一次中獎機會,即已中獎的號碼不會再次中獎。 使用方法: 要求開始抽獎后屏幕上隨機滾動顯示中獎號碼,點擊“STOP”之…

window 系統 使用ollama + docker + deepseek R1+ Dify 搭建本地個人助手

1. 下載ollama ,官網 下載地址:Download Ollama on macOS,選擇 Window 下載完成后,可在終端 使用 ollama --version 2. 下載 本地大模型,這里下載deepseek r1 7b 3.下載Embed模型 Embed模型 是文本工具向量化的核心工…

【學習筆記】 強化學習:實用方法論

作者選擇了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰寫的《Deep Learning》(人工智能領域的經典教程,深度學習領域研究生必讀教材),開始深度學習領域學習,深入全面的理解深度學習的理論知識。 之前的文章參考下面的鏈接&#xf…

益鑫通汽車連接器可替代Molex,JST

# 探秘優質車規連接器 在汽車向新能源和智能化發展的進程中,車規連接器對汽車電子系統的穩定運行至關重要。有企業憑借技術與創新,在該領域表現出色。其車規連接器類型多樣,能滿足汽車不同系統連接需求。 一款2.54Pitch線對板連接器&#xff…

【WPF】將Bitmap圖像轉換為BitmapImage,并給Image控件顯示圖像

1.C#將Bitmap圖像轉換為BitmapImage,并給Image控件顯示圖像后臺實現 public void InitImage(Bitmap bitmap){try{// 將Bitmap轉換為WPF的BitmapImageBitmapImage bitmapImage;using (MemoryStream memory new MemoryStream()){bitmap.Save(memory, System.Drawing.…

Python從入門到高手8.2節-元組的常用操作符

目錄 ?8.2.1 元組的常用操作符 8.2.2 []操作符: 索引訪問元組 8.2.3 [:]操作符:元組的切片 8.2.4 操作符:元組的加法 8.2.5 *操作符:元組的乘法 8.2.6 元組的關系運算 8.2.7 in操作符:查找元素 8.2.8 五一她玩了個狗吃…

Vue3源碼學習4-effect中為什么使用WeakMap,Set?

文章目錄 前言1. 精細化依賴追蹤2. 高效的依賴收集與觸發3. 自動內存管理,防止內存泄漏4. 支持復雜場景 前言 在 mini vue - effect 實現中 設計(WeakMap → Map → Set → effect函數)有以下幾個重要原因: 1. 精細化依賴追蹤 W…

TinyML 邊緣智能:在資源受限 MCU 上部署 AI

前言 在物聯網(IoT)和智能邊緣計算的時代浪潮下,TinyML(微型機器學習)正以前所未有的速度改變著我們與設備交互的方式。它將 AI 推理能力放在資源極度受限的 MCU(微控制器)上,兼顧實時性、低功耗和數據隱私,成為智能家居、可穿戴設備、工業檢測等場景的核心技術。盡管…

技術白皮書:Oracle GoldenGate 優勢

本文為技術白皮書Oracle GoldenGate 優勢的翻譯及閱讀筆記。以下注釋中GoldenGate為OGG。 副標題為:Oracle 數據庫的變更數據捕獲 (CDC) 技術比較。版本為July, 2021, Version 2.1。 Oracle GoldenGate 被客戶和分析師公認為功能最齊全、性能最高、最值得信賴的數…

Android控件VideoView用法

一 控件UI <VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitCenter" /> 二 配置 <?xml version="1.0" encoding="u…

React 第三十六節 Router 中 useParams 的具體使用及詳細介紹

一、useParams 的基本用法 用途&#xff1a;用于在組件中獲取當前 URL 的動態路由參數&#xff08;如 /user/:id 中的 id&#xff09;。 import { Routes, Route, useParams } from react-router-dom;// 定義路由 function App() {return (<Routes><Route path"…

C++戰勝白蟻 2024年信息素養大賽復賽 C++小學/初中組 算法創意實踐挑戰賽 真題詳細解析

目錄 C++戰勝白蟻 一、題目要求 1、編程實現 2、輸入輸出 二、算法分析 三、程序編寫 四、運行結果 五、考點分析 六、 推薦資料 1、C++資料 2、Scratch資料 3、Python資料 C++戰勝白蟻 2024年信息素養大賽 C++復賽真題 一、題目要求 1、編程實現 小明因為很長…

Linux網絡編程 day4

inet_pton&#xff1a;IP 字符串 → 網絡字節序地址 ntohl&#xff1a;網絡字節序 → 主機字節序 TCP狀態轉換圖(重點) 可以通過下面這行代碼查看目前網絡狀態 netstat -apn | grep client 1、主動發起請求端 close-->SYN-->SYN_SENT-->接收ACK、SYN-->SYN_SEN…

基于springboot+vue的個人財務管理系統

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat12開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系統展示 用戶信息管理 賬…

ffmpeg 元數據-avformatcontext字段 AVDictionary *metadata;

ffmpeg 元數據 1. 解釋什么是ffmpeg元數據 ffmpeg元數據是指與音視頻文件相關的附加信息&#xff0c;這些信息不直接影響音視頻內容的播放&#xff0c;但提供了關于文件內容、創作者、版權、播放參數等的有用信息。元數據在音視頻文件的處理、管理和共享中起著重要作用。 2.…

55.[前端開發-前端工程化]Day02-包管理工具npm等

包管理工具詳解 npm、yarn、cnpm、npx、pnpm 1 npm包管理工具 代碼共享方案 包管理工具npm 2 package配置文件 npm的配置文件 方式二 常見的配置文件 常見的屬性 常見的屬性 常見的屬性 依賴的版本管理 常見屬性 npm install 命令 項目安裝 3 npm install原理 npm instal…

Spring MVC @RequestBody 注解怎么用?接收什么格式的數據?

RequestBody 注解的作用 RequestBody 將方法上的參數綁定到 HTTP 請求的 Body&#xff08;請求體&#xff09;的內容上。 當客戶端發送一個包含數據的請求體&#xff08;通常在 POST, PUT, PATCH 請求中&#xff09;時&#xff0c;RequestBody 告訴 Spring MVC 讀取這個請求體…

海外平臺短劇批量混剪自動剪輯智能去重與多語言適配方案解析

一、引言&#xff1a;全球化內容分發的技術挑戰 在短劇出海的浪潮中&#xff0c;如何通過標準化技術流程實現「高效生產 合規分發」成為行業關鍵課題。本文結合 TikTok、YouTube 等平臺的運營經驗&#xff0c;解析基于智能去重算法、多語言字幕生成、動態元素疊加的全流程解決…