數據庫基礎+增刪查改初階

數據庫基礎+增刪查改初階

一。數據庫操作

1.概念:

一個mysql服務器上有很多的表,把有關系的表放在一起就構成了一個數據集合,此時稱為“數據庫”,一個mysql1服務器上可以有多個這樣的數據庫

2.創建數據庫:

create database 數據名;

注:sql關鍵字大小寫都可以

數據庫在創建時不能重復,因此要在創建時加上一個修飾

create database if not exists 數據名

咱們一般在寫數據庫的時候需要中文,但是mysql默認是拉丁文,不支持中文,所以在創建數據庫的時候,要手動指定編碼為中文編碼(GBK或UTF8)因此可以寫成:

create database 數據庫名 charset utf8;

此處的utf8是不完全的,有寫表情是無法識別的,因此如果沒有特殊要求,建議寫成utf8mb4

3.查看數據庫:

列出mysql服務器中都有哪些數據庫

show databases

注:以sql開頭的語句,都要在寫完一句話的時候加上分號,當然mysql客戶端允許輸入sql的時候換行

4.選中數據庫

use 數據庫名

5.刪除數據庫:

drop database 數據名

刪除不僅僅是刪除了數據庫,而且刪除了數據庫中所有的表和表中的數據

6.補充:

數據庫可分為線上數據庫和線下數據庫,線上數據庫存儲的是用戶真實的信息,線下數據庫是開發測試的一些假的數據

mysql服務器必須保證24小時不間斷運行,如果掛了,就會造成極大的影響,因此有了報警系統,會自動的監視著mysql服務器的運行狀態,一旦mysql服務器停止工作,報警系統會第一時間把消息以電話,短信,郵箱等形式傳遞給相關負責人

二。數據表操作

注:針對數據表中的操作,前提是選中數據庫

1.創建表:

create table 表名(列名 類型,列名 類型...);

注意:一定是類型在列名的后面

例子:

create table student(id int, name archer(10));

2.查看所有表:

show tables;

3.查看指定表的結構:

desc 表名

4.刪除表:

drop table 表名

補充:有時候刪表比刪庫更嚴重,因為刪庫程序會在第一時間報錯,而刪表,程序不會在第一時間報錯,可能會以這個錯誤的數據運行很長時間

三。增刪改差(CRUD)

1.新增:

(1)法一:直接插入

insert into 表名 values(值,值...);

此處的值必須與創建表時的數據類型一一對應

(2)法二:指定列插入

insert into 表名(列名,列名...values (值,....);

此處放入的值就要與列名所對應

(3)法三:一次插入多行:

Insert into 表名 values(值,值...) , (值,值...) ....

注意:一次插入多行的速度是要大于一行一行插入的

2.查詢:

(1)全列查詢:
select*from 表名

注意:select*是一個危險的操作,mysql是一個“客戶端—服務器”結構程序,如果當前這個表的數據非常多,就會產生幾個問題:1.在查詢的時候會讀取整個硬盤,會把整個硬盤的IO都給跑滿了,此時在想訪問硬盤就會非常的慢。2.操作網絡,可能把網絡的帶寬跑滿,此時其他網絡訪問服務器就會變得很慢

但是目前初學階段,是可以使用這樣的操作的,當以后進入公司企業工作的生產環境中,這種操作一定要慎重使用

補充:

1.辦公環境:入職公司,公司會分配一個電腦給員工

2.開發環境:有的開發環境是辦公環境,也有的是開發環境,是需要專門的服務器的

3.測試環境:測試工程師針對程序測試的時候,搭配的環境

4.生產環境:一組服務器,這個服務器外面的用戶可以直接訪問的服務器,如果生產環境的服務器出現問題,用戶會得到反饋

第1,2,3都是線下環境,第4個叫做線上環境

(2) 指定列查詢:
select 列名,列名... from 表名
(3)查詢字段為表達式:

例子:

select name,point+10 from 列名;

這種操作不會修改數據庫當中的原始數據,只會暫時的進行更改

(4)別名:

格式:

select 表達式 as 別名 from 表名;

例子:

select name,english+chinese+math as sum from student;

這里的sum其實就是english+chinese+math的別名。

(5)去重:

distinct去修飾某個列,或多個列

值相同的行只會保留一個

select distinct 列名 from 表名;

這里的列名可以是多個,但是最好根據需求來確定寫什么列,因為如果寫了多個列,那么必須保證這些列的元素都相同才可以去重

(6)查詢進行排序:

規則:1.要針對哪個列進行比較 2. 排序時是升序還是降序

select 列名 from 表名 order by 列名 asc/desc

asc表示升序,desc表示降序

如果不寫desc或者asc則自動默認為升序排序

這里的排序是臨時數據,他不會影響原有數據在數據庫的存儲順序

注意:如果排序的時候遇到了null,則視為null比任何數據都要小,升序時排在最上面,降序時排在最下面

同樣,可以對多個字段進行排序,排序優先級隨書寫順序

例子1:

查詢同學的各門成績,一次按數學降序,英語升序,語文升序的方式顯示

select name, math,english,chinese from exam order by math desc, english,chinese;

例子2:

select*from exam order by math desc, chinese desc;

先以數學成績排序,當遇到數學成績相同的,再按照語文成績進行排序

注意:null參與各種運算的結果還是null

(7)條件查詢:
select 列名 from 表名 where 條件;

在執行條件查詢的時候會遍歷這個表的每一行記錄,把每一行的數據分別代入這個條件中,如果成立就會把結果放入結果集合中,如果不成立就pass

注意:

(1).where 條件可以用于表達式,但是不能使用別名

(2).and的優先級大于or,在同時使用時,要用小括號()包裹優先執行的部分

無論有幾個列,都可以使用上述方法進查詢

基本查詢:

(1).查詢英語成績小于60分的同學

select name,english from exam where english<60;

(2).查詢英語成績高于語文成績的同學:

select name,english,chinese from exam where english>chinese;

(3).查詢語數外總分低于200的同學:

select name,english+math+chinese from exam where english+math+chinese<200;

and與or

查詢語文大于80分,英語大于100分的同學

select name chinese,english from exam where chinese>80 and english>100;

范圍查詢:

(1)between…and…

查詢語文成績在80到90分的同學的語文成績:

select name ,chinese from exam where chinese between 80 and 90;

(2)in

查詢數據時58或59或60或61的同學的數學成績

select name, math from exam where math in(58,59,60,61);

模糊查詢:LIKE

select name from exam where name LIKE '孫%'

注:%表示任意多個字符

select name from exam where name LIKE'孫_‘;

注:_表示任意一個字符

(8)分頁查詢:LIMIT

limit可以限制這次查詢最多查詢出幾個結果,適用條件就是有的時候數據非常的多,一次展示出來會影響效率,不方便用戶觀看

select *from 表名 limit 數字;

這個數字就是在限制打印的個數,這段代碼的意思就是只打印這個表的數字之前的數據

select *from 表名 limit 數字1 offset 數字2;

這串代碼表示,只會打印數字1到數字2之間到數據

例子:

select *from exam limit 3 offset 3

這里只會打印表中的4,5,6行數據

注意:limit一般放在一句話的最后

3.修改:

update 表名 set 列名=where 條件;

修改是可以直接修改多個值的

update 表名 set 列名=值,列名=值,......where 條件;

例子:將總成績倒數前三的3位同學的數學成績減30分

update exam set math=math-30 order by chinese+math+English limit 3;

4.刪除:

delete from 表名 where 條件 /order by / limit;

例子:

delete from student where name=’xiao ming‘;

這樣就刪除了student這張表中小明這一行的所有數據

刪表:

delete from 表名;

注意:此處的delete from 和drop table不同。

delete from 是刪除表中的所有數據,但是不刪表

drop table是即刪除表中數據,又把表刪除

四。數據庫約束

1.NULL約束

指某個列不能存放null值

create table student(id int not null, name varchar(10),email int);

2.UNIQUE約束

被修飾的列是不能重復的

create table student(id int unique, name varchar(10),email int);

3.default約束:

規定沒有給列賦值時的默認值

create table student(id int, name varchar(10) default ‘unknown’,email int);

這里就是對name設置了默認值,如果當插入數據的時候,沒有插入這一列,則默認設為unknown

4.primary key主鍵:

確保某列有唯一的標識,簡單點來說就是一行記錄的身份標識

用法其實就是not null和unique的結合

一個表中只能有一個主鍵

create table student(id int primary key, name varchar(10) ,email int);

對應整數主鍵,通常搭配auto_increment來使用,插入數據對應字段不給值時,使用最大值+1

create table student(id int primary key auto_increment, name varchar(10) );

例子:

insert into student values(null,'zhangsan');

假設這張表中沒有插入過數據,則默認插入這條數據中的null為1;

如果再次插入上面一串代碼,則id 就變為了1+1=2,第一個1是目前的最大值,第二個1是指auto_increment的特性(最大值+1)

寫做空,其實是交給數據庫服務器自動分配

自動分配也存在局限性,如果當mysql服務器是沒有問題的,如果是有多個服務器,這是自動分配就不行了

5.foreign key 外鍵:

作用:兩個表之間的關聯關系

例子:

class(classid,name )100。    TT1114101      TT1964102      TT2103
student(id ,  name,  classid)1    zhangsan   1002    lisi       1013    wangwu。   1024    zhaoliu    200

這里的student表中的zhaoliu的classid是不合法的,因為classid是根據class表中的classid來定義的,如果class表中沒有,則不合法,所以叫這里的class表為父表,student為子表

寫法:

create table student(id int primary key,name archer(10),classId int, foreignn key(classId) references class(classId));           

foreign key要加在最后的部分,foreign key 后的第一個括號要寫被約束的列,后面references 再加上約束別人的表(約束列)

注意:如果被外鍵修飾,并且已經插入數據,則不能直接刪除父表,應先刪除子表再刪除父表

6.擴展:

有一個生活中常見的場景,就是在逛某寶或某多多的時候經常會發現一個商品賣完了,但是在上面外鍵的部分講到了,如果要刪除被外鍵修飾的列的數據時,需要先把所有已經插入的數據全部刪除,才可以刪除被外鍵修飾的列,但是為什么這些購物網站可以成功的把商品下架,并且對已購買的買家依然發貨?

其實這其中就使用了一個很巧妙的方法:邏輯刪除

先給商品表加上一個單獨的列,表示是否在線(不在線,就相當于下架了)

商品表(goodsid,name,price…,isOK)

這里的isOK就是我們新建的單獨的列,如果值為1,表示商品在線,如果值為0,則表示下架,如果商品需要下架只需要把isOK從1改為0

其實電腦上刪除文件也是使用了邏輯刪除的方法,如果只是將文件放入垃圾箱,并且清理回收站是無法做到完全刪除的,硬盤中的數據完全刪除是需要時間的,需要后續有文件把這塊標價無效的空間重復利用,才會真正的消失,當然有一種非常快的方法可以把硬盤上的數據完全刪除,那就是使用物理刪除,就是通過把硬盤砸了等物理方法銷毀數據

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

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

相關文章

穩住!一招制勝:打造JavaScript防抖函數的終極指南【含代碼示例】

穩住&#xff01;一招制勝&#xff1a;打造JavaScript防抖函數的終極指南【含代碼示例】 防抖函數&#xff1a;概念與作用基礎實現&#xff1a;案例一簡單防抖函數使用示例 進階功能&#xff1a;案例二 - 立即執行版本性能優化與安全考量實戰技巧與問題排查實際問題與解決方案結…

基于python flask的旅游數據大屏實現,有爬蟲有數據庫

背景 隨著旅游行業的快速發展&#xff0c;數據在旅游決策和規劃中的重要性日益凸顯。基于 Python Flask 的旅游數據大屏實現研究旨在結合爬蟲技術和數據庫存儲&#xff0c;為用戶提供全面、實時的旅游信息展示平臺。 爬蟲技術作為數據采集的重要手段&#xff0c;能夠從各種網…

錯誤記錄:從把項目從Tomcat8.5.37轉到Tomcat10.1.7

錯誤信息&#xff1a;在本地Servlet項目里沒有報錯&#xff0c;但是瀏覽器跳轉該servlet時報錯 型 異常報告 消息 實例化Servlet類[com.wangdao.lx.MyServlet1]異常 描述 服務器遇到一個意外的情況&#xff0c;阻止它完成請求。 例外情況 jakarta.servlet.ServletExceptio…

Generative Action Description Prompts for Skeleton-based Action Recognition

標題&#xff1a;基于骨架的動作識別的生成動作描述提示 源文鏈接&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Xiang_Generative_Action_Description_Prompts_for_Skeleton-based_Action_Recognition_ICCV_2023_paper.pdfhttps://openaccess.thecvf.c…

解決文件傳輸難題:如何繞過Gitee的100MB上傳限制

引言 在版本控制和代碼托管領域&#xff0c;Gitee作為一個流行的平臺&#xff0c;為用戶提供了便捷的服務。然而&#xff0c;其對單個文件大小設定的100MB限制有時會造成一些不便。 使用云存儲服務 推薦理由&#xff1a; 便捷性&#xff1a;多數云存儲服務如&#xff1a; Dro…

現代操作系統上創建各類鏈接的方法匯總

文章目錄 現代操作系統上創建各類鏈接的方法匯總windows: cmd下的mklink創建鏈接示例 powershell 創建鏈接創建常規文件和目錄創建鏈接 linux shell 創建硬鏈接NAMESYNOPSIS詳細說明常用選項示例 檢查與辨識符號鏈接&#x1f388;linux下檢查ls -l 命令file 命令 windows下檢查…

零基礎學習圖生圖

目錄 一、圖生圖是什么二、安裝秋葉整合包2.1 秋葉包安裝2.2 秋葉包拓展安裝&#xff1a;2.3 ckpt配置&#xff1a;2.4 界面常用功能配置&#xff1a; 三、圖生圖基本功能展示3.1 圖生圖的界面3.2 重要的參數設置&#xff1a;3.3 涂鴉功能3.4 局部重繪功能3.5 涂鴉重繪3.6 上傳…

SQL 語言:存儲過程和觸發器

文章目錄 基本概述創建觸發器更改和刪除觸發器總結 基本概述 存儲過程&#xff0c;類似于高階語言的函數或者方法&#xff0c;包含SQL語句序列&#xff0c;是可復用的語句&#xff0c;保存在數據庫中&#xff0c;在服務器中執行。特點是復用&#xff0c;提高了效率&#xff0c…

網絡智能化的發展對仿真環境的需求

1. 網絡智能化背景介紹 1.1 什么是網絡智能化 網絡智能化是指利用人工智能&#xff08;AI&#xff09;、機器學習&#xff08;ML&#xff09;、優化算法等技術來實現網絡的信息化、自動化和智能化。相對5G、6G、算力網絡等領域&#xff0c;網絡智能化是針對網絡全場景、全要素…

使用C語言openssl庫實現 RSA加密 和 消息驗證

Q&#xff1a;什么是RSA&#xff1f; A&#xff1a;RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一種非對稱加密算法&#xff0c;是最早的一種用于公開密鑰加密和數字簽名的算法。它使用一對公鑰&#xff08;public key&#xff09;和私鑰&#xff08;private key&…

去掉macOS終端命令行前的(base)

macOS在安裝了Anaconda&#xff08;或miniconda&#xff09;后&#xff0c;每次打開terminal都會默認打開名為base的虛擬環境。 默認不啟動base conda config --set auto_activate_base false默認啟動base conda config --set auto_activate_base true

IEEE Latex模版踩雷避坑指南

參考文獻 原Latex模版 \begin{thebibliography}{1} \bibliographystyle{IEEEtran}\bibitem{ref1} {\it{Mathematics Into Type}}. American Mathematical Society. [Online]. Available: https://www.ams.org/arc/styleguide/mit-2.pdf\bibitem{ref2} T. W. Chaundy, P. R. Ba…

【前端每日基礎】day27——小程序開發

小程序開發詳細介紹 基本概念 小程序&#xff1a;小程序是一種無需下載安裝即可使用的應用。用戶通過微信搜索或掃描二維碼即可打開小程序。小程序具有觸手可及、用完即走、體驗良好的特點。 組成部分&#xff1a; WXML&#xff1a;用于描述頁面的結構。 WXSS&#xff1a;用于…

2022職稱繼續教育--深入實施新時代人才強國戰略 加快建設世界重要人才中心和創新高地

單選題&#xff08;共7題&#xff0c;每題5分&#xff09; 1、&#xff08;&#xff09;實行職位職級制工資為主。 D、中長線科研重要崗位人員 2、建設世界重要人才中心和創新高地有&#xff08;&#xff09;個階段目標。 B、三 3、綜合國力競爭說到底是&#xff08;&#xf…

基于 FastAI 文本遷移學習的情感分類(93%+Accuracy)

前言 系列專欄:【深度學習&#xff1a;算法項目實戰】?? 涉及醫療健康、財經金融、商業零售、食品飲料、運動健身、交通運輸、環境科學、社交媒體以及文本和圖像處理等諸多領域&#xff0c;討論了各種復雜的深度神經網絡思想&#xff0c;如卷積神經網絡、循環神經網絡、生成對…

[vue3后臺管理二]首頁和登錄測試

[vue3后臺管理二]首頁和登錄測試 1 修改main.js import ./assets/main.cssimport { createApp } from vue import App from ./App.vue import router from ./router createApp(App).use(router).mount(#app)2 路由創建 import {createRouter, createWebHistory} from vue-ro…

計算機網絡學習筆記——運輸層(b站)

目錄 一、 運輸層概述 二、運輸層端口號、復用與分用的概念 三、UDP和TCP的對比 四、TCP的流量控制 五、TCP的擁塞控制 六、TCP超時重傳時間的選擇 七、TCP可靠傳輸的實現 八、TCP報文段的首部格式 一、 運輸層概述 物理層、數據鏈路層、網絡層實現了主機到主機的通信…

使用springdoc-openapi-starter-webmvc-ui后訪問swagger-ui/index.html 報錯404

按照官網說明&#xff0c;引入 springdoc-openapi-starter-webmvc-ui后應該就可以直接訪問swagger-ui.html或者swagger-ui/index.html就可以出現swagger頁面了&#xff0c;但是我引入后&#xff0c;訪問提示報錯404. 在我的項目中&#xff0c;有其他依賴間接引入了org.webjars…

剪映網頁版

https://www.capcut.cn/web 免費&#xff0c;免安裝&#xff0c;跨平臺&#xff0c;視頻云合成&#xff0c;簡直太好用了&#xff01;

echarts-事件

echarts部分事件 添加點擊事件 添加點擊事件&#xff1a; let options {tooltip: {},xAxis: {type: "category",data: ["d1", "d2", "d3", "d4"],},yAxis: {},series: [{type: "line",data: d1,},{type: &qu…