據(jù)庫零基礎(chǔ)入門)
一、前言數(shù)據(jù)庫是后端開發(fā)必不可少的核心工具我們寫的聊天系統(tǒng)、圖書管理系統(tǒng)所有用戶信息、業(yè)務(wù)數(shù)據(jù)都需要存放在數(shù)據(jù)庫中。很多剛接觸后端的同學(xué)對數(shù)據(jù)庫概念陌生分不清DDL、DML、DQL寫查詢語句經(jīng)常出錯。本文從零開始從概念、軟件安裝到庫、表操作再到全套查詢語句全部搭配可直接復(fù)制運行的SQL示例小白跟著敲代碼就能學(xué)會。掌握本章為后續(xù)JavaWeb開發(fā)鋪路。二、數(shù)據(jù)庫基礎(chǔ)與MySQL環(huán)境搭建1、數(shù)據(jù)庫相關(guān)概念1.1 數(shù)據(jù)庫? 存儲數(shù)據(jù)的倉庫數(shù)據(jù)是有組織的進行存儲運行在服務(wù)器上可以持久保存數(shù)據(jù)? 英文DataBase簡稱DB1.2 數(shù)據(jù)庫管理系統(tǒng)? 管理數(shù)據(jù)庫的大型軟件? 英文DataBase Management System簡稱DBMS1.3 SQL? 英文Structured Query Language簡稱SQL結(jié)構(gòu)化查詢語言? 操作關(guān)系型數(shù)據(jù)庫的編程語言? 定義操作所有關(guān)系型數(shù)據(jù)庫的統(tǒng)一標(biāo)準(zhǔn)1.4 常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)? Oracle收費的大型數(shù)據(jù)庫Oracle公司的產(chǎn)品?MySQL開源免費的中小型數(shù)據(jù)庫。后來Sun公司收購了MySQL而Sun公司又被Oracle收購? SQL ServerMiscroSoft公司收費的中型的數(shù)據(jù)庫。C#、.net等語言常使用? PostgreSQL開源免費中小型的數(shù)據(jù)庫? DB2IBM公司的大型收費數(shù)據(jù)庫產(chǎn)品? SQLite嵌入式的微型數(shù)據(jù)庫。如作為Android內(nèi)置數(shù)據(jù)庫? MariaDB開源免費中小型的數(shù)據(jù)庫2、MySQL安裝/配置/登錄/卸載2.1 下載 安裝解壓https://downloads.mysql.com/archives/community/到對應(yīng)官網(wǎng)下載壓縮包安裝MySQL服務(wù)本體提供數(shù)據(jù)庫服務(wù)。2.2 配置2.2.1 添加環(huán)境變量右鍵此電腦 → 屬性點擊高級系統(tǒng)設(shè)置點擊環(huán)境變量在系統(tǒng)變量中新建MYSQL_HOME點擊確定確定后編譯一下Path添加bin目錄2.2.2 新建配置文件新建一個文本文件內(nèi)容如下更改設(shè)置mysql的安裝目錄和設(shè)置mysql數(shù)據(jù)庫 的數(shù)據(jù)的存放目錄雙斜線[mysql] # 設(shè)置mysql客戶端默認字符集 default-character-setutf8 [mysqld] # 設(shè)置3306端口 port 3306 # 設(shè)置mysql的安裝目錄 basedir D:\\MySQL\\mysql-5.7.24-winx64 # 設(shè)置mysql數(shù)據(jù)庫的數(shù)據(jù)的存放目錄 datadir D:\\MySQL\\mysql-5.7.24-winx64\\data # 允許最大連接數(shù) max_connections20 # 服務(wù)端使用的字符集默認為8比特編碼的latin1字符集 character-set-serverutf8 # 創(chuàng)建新表時將使用的默認存儲引擎 default-storage-engineINNODB # 創(chuàng)建模式 sql_mode NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES把上面的文本文件另存為在保存類型里選所有文件* . *)文件名叫my.ini存放的路徑為MySQL的根目錄例如我的是D:\MySQL\mysql-5.7.24-winx64根據(jù)自己的MySQL位置修改。2.2.3 初始化MySQL在cmd里面輸入 mysqld --initialize-insecure注意這里要用管理員方式運行cmd回車后會發(fā)現(xiàn)文件夾下會多出一個新的文件夾data2.2.4 注冊MySQL服務(wù)在cmd里敲入 mysqld -install回車mysqld -install現(xiàn)在計算機上已經(jīng)安裝好了MySQL服務(wù)了2.2.5 啟動MySQL服務(wù)在cmd里敲入 net start mysql回車net start mysql // 啟動mysql服務(wù) net stop mysql // 停止mysql服務(wù)2.2.6 修改默認賬戶密碼在cmd里敲入 mysqladmin -u root password 1119這里的1119就是指默認管理員即root賬戶的密碼可以自行修改。mysqladmin -u root password 11192.3 登錄/退出MySQL在cmd中敲入 mysql -uroot -p 后輸入密碼回車mysql -uroot -p退出mysql以下兩種都可以exit quit上面是連接本機的MySQL如若要連接別人的MySQL注意以下登陸參數(shù)mysql -u用戶名 -p密碼 -h要連接的mysql服務(wù)器ip地址(默認127.0.0.1) -p端口號(默認3306)2.4 卸載MySQL① 敲入 net stop mysql 回車net stop mysql② 再敲入 mysql -remove mysql 回車mysql -remove mysql③ 最后刪除MySQL目錄及相關(guān)的環(huán)境變量3、MySQL數(shù)據(jù)模型關(guān)系型數(shù)據(jù)庫關(guān)系型數(shù)據(jù)庫是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫簡單說關(guān)系型數(shù)據(jù)庫是由多張能互相連接的二維表組成的數(shù)據(jù)庫。數(shù)據(jù)庫 → 多張數(shù)據(jù)表 → 表里面多行數(shù)據(jù)每行分為多個字段列。類比Excel一個數(shù)據(jù)庫一個Excel文件一張數(shù)據(jù)表Excel里面的一個工作表。? 優(yōu)點① 都是使用表結(jié)構(gòu)格式一致易于維護② 使用通用的SQL語言操作使用方便可用于復(fù)雜查詢③ 數(shù)據(jù)存儲在磁盤中安全在MySQL里數(shù)據(jù)庫就相當(dāng)于硬盤上的文件夾三、SQL簡介、通用語法及分類1、SQL簡介? 英文Structured Query Language簡稱SQL? 結(jié)構(gòu)化查詢語言一門操作關(guān)系型數(shù)據(jù)庫的編程語言? 定義操作所有關(guān)系型數(shù)據(jù)庫的統(tǒng)一標(biāo)準(zhǔn)? 對于同一個需求每一種數(shù)據(jù)庫操作的方式可能會存在一些不一樣的地方我們稱為“方言”2、SQL通用語法① SQL語句可以單行或多行書寫以分號結(jié)尾② MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫關(guān)鍵字建議使用大寫③ 注釋? 單行注釋-- 注釋內(nèi)容一定要有空格否則會報錯 或 #注釋內(nèi)容MySQL特有? 多行注釋/* 注釋 */3、分類? DDLData Definition Language數(shù)據(jù)定義語言用來定義數(shù)據(jù)庫對象數(shù)據(jù)庫表列等? DMLData Manipulation Language數(shù)據(jù)操作語言用來對數(shù)據(jù)庫中表的數(shù)據(jù)進行增刪改? DQLData Query Language數(shù)據(jù)查詢語言用來查詢數(shù)據(jù)庫中表的記錄數(shù)據(jù)? DCLData Control Language數(shù)據(jù)控制語言用來定義數(shù)據(jù)庫的訪問權(quán)限和安全級別及創(chuàng)建對象四、DDL庫與表的管理語法1、DDL操作數(shù)據(jù)庫1.1 查詢所有數(shù)據(jù)庫show databases;1.2 創(chuàng)建數(shù)據(jù)庫? 創(chuàng)建數(shù)據(jù)庫create database 數(shù)據(jù)庫名稱;? 創(chuàng)建數(shù)據(jù)庫判斷如果不存在則創(chuàng)建create database if not exists 數(shù)據(jù)庫名稱;使用判斷即使存在該數(shù)據(jù)庫也不會報錯。1.3 刪除數(shù)據(jù)庫? 刪除數(shù)據(jù)庫drop database 數(shù)據(jù)庫名稱;? 刪除數(shù)據(jù)庫判斷如果存在則刪除drop database if exists 數(shù)據(jù)庫名稱;1.4 使用數(shù)據(jù)庫? 查看當(dāng)前使用的數(shù)據(jù)庫select database();? 使用數(shù)據(jù)庫use 數(shù)據(jù)庫名稱;2、DDL操作數(shù)據(jù)表2.1 查詢表? 查詢當(dāng)前數(shù)據(jù)庫下所有表名稱show tables;? 查詢表結(jié)構(gòu)desc 表名稱;2.2 創(chuàng)建表create table 表名( 字段名1 數(shù)據(jù)類型1 字段名2 數(shù)據(jù)類型2 ... 字段名n 數(shù)據(jù)類型n );?注意最后一行末尾不能加逗號2.3 表的數(shù)據(jù)類型? MySQL支持多種類型可以分為三類? 數(shù)值? 日期? 字符串分類數(shù)據(jù)類型大小/格式描述數(shù)值類型TINYINT1字節(jié)小范圍整數(shù)SMALLINT2字節(jié)中等范圍整數(shù)MEDIUMINT3字節(jié)較大范圍整數(shù)INT/INTEGER4字節(jié)大整數(shù)類型BIGINT8字節(jié)極大范圍整數(shù)FLOAT4字節(jié)單精度浮點數(shù)DOUBLE8字節(jié)格式score double(總長度小數(shù)點后保留的位數(shù))雙精度浮點數(shù)DECIMAL小數(shù)值日期和時間類型DATE格式為YYYY-MM-DD存儲日期TIME格式為HH:MM:SS存儲時間YEAR格式為YYYY存儲年份DATETIME格式為YYYY-MM-DD HH:MM:SS存儲日期和時間TIMESTAMP存儲時間戳字符串類型CHAR0-255字節(jié)定長字符串VARCHAR0-65535字節(jié)變長字符串TINYBLOB0-255字節(jié)不超過255個字符的二進制字符串TINYTEXT0-255字節(jié)短文本字符串BLOB0-65535字節(jié)二進制形式的長文本數(shù)據(jù)TEXT0-65535字節(jié)長文本數(shù)據(jù)MEDIUMBLOB0-16777215字節(jié)二進制形式的中等長度文本數(shù)據(jù)MEDIUMTEXT0-16777215字節(jié)中等長度文本數(shù)據(jù)LONGBLOB0-4294967295字節(jié)二進制形式的極大文本數(shù)據(jù)LONGTEXT0-4294967295字節(jié)極大文本數(shù)據(jù)2.4 修改表2.4.1 修改表名alter table 表名 rename to 新的表名;2.4.2 添加一列alter table 表名 add 列名 數(shù)據(jù)類型;2.4.3 修改數(shù)據(jù)類型alter table 表名 modify 列名 新數(shù)據(jù)類型;2.4.4 修改列名和數(shù)據(jù)類型alter table 表名 change 列名 新列名 新數(shù)據(jù)類型;2.4.5 刪除列alter table 表名 drop 列名;2.5 刪除表? 刪除表drop table 表名;? 刪除表時判斷表是否存在drop table if exists 表名;五、圖形化客戶端工具-Navicat? Navicat for MySQL 是管理和開發(fā) MySQL 或 MariaDB 的理想解決方案? 這套全面的前端工具為數(shù)據(jù)庫管理、開發(fā)和維護提供了一款直觀而強大的圖形界面? 官網(wǎng)http://www.navicat.com.cn下載安裝成功后連接本機MySQL想要修改表只需要右鍵點擊設(shè)計表要想在客戶端工具里寫SQL語句只需要點擊查詢后點擊新建查詢在面板中就可以寫SQL語句。寫完的語句選中右鍵運行即可六、DML數(shù)據(jù)增刪改操作DDL改表結(jié)構(gòu)DML改表里真實的數(shù)據(jù)行。1、添加數(shù)據(jù) insert1.1 給指定列添加數(shù)據(jù)insert into 表名(列名1列名2...) values(值1值2...);1.2 給全部列整行插入添加數(shù)據(jù)insert into 表名 values(值1值2...);1.3 批量添加數(shù)據(jù)一次性插入多條insert into 表名(列名1列名2...) values(值1值2...),(值1值2...)...; insert into 表名 values(值1值2...),(值1值2...)...;2、修改數(shù)據(jù) updateupdate 表名 set 列名1值1,列名2值2,... where 條件;?重點不加 where 條件會修改整張表全部數(shù)據(jù)新手務(wù)必帶上 where 3、刪除數(shù)據(jù) deletedelete from 表名 where 條件;?重點不加where條件清空整張表所有數(shù)據(jù)七、DQL數(shù)據(jù)查詢核心語法DQL是開發(fā)使用最多只讀取數(shù)據(jù)不會修改數(shù)據(jù)庫內(nèi)容可以放心練習(xí)。準(zhǔn)備一張練習(xí)student表? 基礎(chǔ)查詢 ? 條件查詢(where) ? 分組查詢(group by) ? 排序查詢(order by) ? 分頁查詢(limit)select 字段列表 from 表名列表 where 條件列表 group by 分組字段 having 分組后條件 order by 排序字段 limit 分頁限定1、基礎(chǔ)查詢1.1 查詢多個字段select 字段列表 from 表名; select * from 表名; -- 查詢所有數(shù)據(jù)1.2 去除重復(fù)記錄select distinct 字段列表 from 表名;1.3 起別名as: as 也可以省略2、條件查詢2.1 條件查詢語法select 字段列表 from 表名 where 條件列表;2.2 條件運算符符號功能大于小于大于等于小于等于等于 或 !不等于between ... and ...在某個范圍內(nèi)都包含in(...)多選一like 占位符模糊查詢 _單個任意字符 %多個任意字符is null是nullis not null不是nulland 或 并且or 或 ||或者not 或 !非不是? 查詢年齡等于18歲? 年齡大于19? 年齡18并且性別女? 分?jǐn)?shù)80-100之間? 模糊查詢名字以張開頭? 查詢第二個是紅的學(xué)生信息3、排序查詢 order byselect 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2] ...;排序方式asc升序排列默認值desc降序排列注意如果有多個排序條件當(dāng)前邊的條件值一樣時才會根據(jù)第二條件進行排序? 分?jǐn)?shù)降序排序? 先按年齡升序年齡相同再按分?jǐn)?shù)降序4、聚合函數(shù)4.1 概念將一列數(shù)據(jù)作為一個整體進行縱向計算。4.2 聚合函數(shù)分類函數(shù)名功能count(列名)統(tǒng)計數(shù)量(一般選用不為null的列)max(列名)最大值min(列名)最小值sum(列名)求和avg(列名)平均值4.3 聚合函數(shù)語法select 聚合函數(shù)名(列名) from 表名;注意null值不參與所有聚合函數(shù)運算4.4 聚合函數(shù)演示? 總記錄數(shù)量? 最高分? 最低分? 分?jǐn)?shù)總和? 平均分5、分組查詢 group byselect 字段列表 from 表名 [where 分組前條件限定] group by 分組字段名 [having 分組后條件過濾];注意分組之后查詢的字段為聚合函數(shù)和分組字段查詢其他字段無任何意義?where 和 having 區(qū)別? 執(zhí)行時機不一樣where 是分組之前進行限定不滿足where條件則不參與分組而having是分組之后對結(jié)果進行過濾? 可判斷條件不一樣where 不能對聚合函數(shù)進行判斷having 可以執(zhí)行順序where 聚合函數(shù) having? 查詢男同學(xué)和女同學(xué)各自的平均分? 查詢男同學(xué)和女同學(xué)各自的平均分以及各自人數(shù)要求分?jǐn)?shù)低于60分的不參與分組? 查詢男同學(xué)和女同學(xué)各自的平均分以及各自人數(shù)要求分組之后人數(shù)大于兩個的select后面寫的字段要么是group by分組字段要么是聚合函數(shù)其他字段不要寫。6、分頁查詢 limitselect 字段列表 from 表名 limit 起始索引,每頁條數(shù);? 起始索引從0開始計算公式起始索引當(dāng)前頁碼-1* 每頁顯示的條數(shù)tips? 分頁查詢 limit 是MySQL數(shù)據(jù)庫的方言? Oracle 分頁查詢使用 rownumber? SQL Server 分頁查詢使用 top? 從0開始查詢查詢2條數(shù)據(jù)? 每頁顯示2條數(shù)據(jù)查詢第1頁數(shù)據(jù)? 每頁顯示2條數(shù)據(jù)查詢第2頁數(shù)據(jù)? 每頁顯示2條數(shù)據(jù)查詢第3頁數(shù)據(jù)7、小結(jié)查詢完整執(zhí)行順序from 表 → where條件 → group by分組 → having → select查詢字段 → order by排序 → limit分頁八、結(jié)語本篇完整覆蓋MySQL入門階段核心知識點我們學(xué)習(xí)了數(shù)據(jù)庫概念、環(huán)境部署、DDL庫表操作、DML數(shù)據(jù)增刪改、DQL各類查詢。SQL是后端的基本功多動手寫練習(xí)SQL避免只看不動手。掌握本篇內(nèi)容為后續(xù)JavaWeb、SpringBoot項目開發(fā)打下扎實基礎(chǔ)。