猿创征文 | MySQL从基础到高级
目錄
1,數據庫相關概念
1.1 數據庫
1.2 數據庫管理系統
1.3 常見的數據庫管理系統
1.4 SQL
2,MySQL
2.1 MySQL安裝
2.1.1 下載
2.2 MySQL卸載
2.3 MySQL配置
2.3.1 添加環境變量
2.3.2 新建配置文件
2.3.3 初始化MySQL
2.3.6 修改默認賬戶密碼
2.4 MySQL登陸和退出
2.4.1 登陸
2.4.2 退出
2.5 MySQL數據模型
3,SQL概述
3.1 SQL簡介
3.2 通用語法
3.3 SQL分類
4,DDL:操作數據庫
4.1 查詢
4.2 創建數據庫
4.3 刪除數據庫
4.4 使用數據庫
5,DDL:操作表
5.1 查詢表
5.2 創建表
5.3 數據類型
5.4 刪除表
5.5 修改表
6.3.1 建立和mysql服務的連接
6.3.2 操作
7,DML
7.1 添加數據
7.2 修改數據
7.3 刪除數據
8,DQL
8.1 基礎查詢
8.2 條件查詢
8.3 排序查詢
8.4 聚合函數
8.4.1 概念
8.4.2 聚合函數分類
8.4.3 聚合函數語法
8.5 分組查詢
8.6 分頁查詢
9,約束
9.1 概念
9.2 分類
9.3 非空約束
9.4 唯一約束
9.5 主鍵約束
9.6 默認約束
9.7?外鍵約束
9.8.1 概述
9.8.2 語法
10,數據庫設計
2.1 數據庫設計簡介
2.2 表關系(一對多)?
2.3 表關系(多對多)
2.4 表關系(一對一)
11,多表查詢
11.1 內連接查詢
11.2 外連接查詢
11.3 子查詢
1,數據庫相關概念
1.1 數據庫
存儲和管理數據的倉庫,數據是有組織的進行存儲。
數據庫英文名是 DataBase ,簡稱 DB 。 數據庫就是將數據存儲在硬盤上,可以達到持久化存儲的效果。1.2 數據庫管理系統
管理數據庫的大型軟件
英文: DataBase Management System ,簡稱 DBMS 在電腦上安裝了數據庫管理系統后,就可以通過數據庫管理系統創建數據庫來存儲數據,也可以通過該系統對數據庫中的數 據進行數據的增刪改查相關的操作。我們平時說的MySQL 數據庫其實是 MySQL 數據庫管理系統。?
1.3 常見的數據庫管理系統
Oracle:收費的大型數據庫,Oracle 公司的產品
MySQL : 開源免費的中小型數據庫。后來 Sun 公司收購了 MySQL ,而 Sun 公司又被 Oracle 收購 SQL Server : MicroSoft 公司收費的中型的數據庫。 C# 、 .net 等語言常使用 PostgreSQL :開源免費中小型的數據庫 DB2 : IBM 公司的大型收費數據庫產品 SQLite :嵌入式的微型數據庫。如:作為 Android 內置數據庫 MariaDB :開源免費中小型的數據庫1.4 SQL
英文: Structured Query Language ,簡稱 SQL ,結構化查詢語言 操作關系型數據庫的編程語言 定義操作所有關系型數據庫的統一標準,可以使用 SQL 操作所有的關系型數據庫管理系統,以后工作中如果使用到了其 他的數據庫管理系統,也同樣的使用 SQL 來操作。2,MySQL
2.1 MySQL安裝
2.1.1 下載
https://downloads.mysql.com/archives/community/
2.1.2 安裝 ( 解壓 ) 下載完成后我們得到的是一個壓縮包,將其解壓,我們就可以得到 MySQL 5.7.24 的軟件本體了 ( 就是一個文件夾 ) ,我們可以 把它放在你想安裝的位置。2.2 MySQL卸載
如果你想卸載MySQL,也很簡單。
右鍵開始菜單,選擇 命令提示符 ( 管理員 ) ,打開黑框 1、net stop mysql(停止連接) 2、 mysqld -remove mysql(移除mysql) 3. 最后刪除 MySQL 目錄及相關的環境變量。2.3 MySQL配置
2.3.1 添加環境變量
2.3.2 新建配置文件
2.3.3 初始化MySQL
mysqld --initialize-insecure
2.3.4 注冊MySQL服務
mysqld -install
2.3.5 啟動MySQL服務
net start mysql // 啟動mysql服務
net stop mysql // 停止 mysql 服務2.3.6 修改默認賬戶密碼
mysqladmin -u root password 1234
2.4 MySQL登陸和退出
2.4.1 登陸
mysql -uroot -p1234
格式:mysql -u用戶名 -p密碼 -h要連接的mysql服務器的ip地址(默認127.0.0.1) -P端口號(默認3306)
2.4.2 退出
exit quit2.5 MySQL數據模型
關系型數據庫:
關系型數據庫是建立在關系模型基礎上的數據庫,簡單說,關系型數據庫是由多張能互相連接的 二維表 組成的數據庫 如下圖, 訂單信息表 和 客戶信息表 都是有行有列二維表我們將這樣的稱為關系型數據庫。?關系型數據庫的優點:
都是使用表結構,格式一致,易于維護。
使用通用的 SQL 語言操作,使用方便,可用于復雜查詢。
????????關系型數據庫都可以通過SQL 進行操作,所以使用方便。 ????????復雜查詢。現在需要查詢001 號訂單數據,我們可以看到該訂單是 1 號客戶的訂單,而 1 號訂單是李聰這個客戶。以 ????????后也可以在一張表中進行統計分析等操作。 數據存儲在磁盤中,安全。 小結: MySQL 中可以創建多個數據庫,每個數據庫對應到磁盤上的一個文件夾 在每個數據庫中可以創建多個表,每張都對應到磁盤上一個 frm 文件 每張表可以存儲多條數據,數據會被存儲到磁盤中 MYD 文件中3,SQL概述
3.1 SQL簡介
英文:Structured Query Language,簡稱 SQL。
結構化查詢語言,一門操作關系型數據庫的編程語言。
定義操作所有關系型數據庫的統一標準。
對于同一個需求,每一種數據庫操作的方式可能會存在一些不一樣的地方,我們稱為 “ 方言 ”。3.2 通用語法
SQL 語句可以單行或多行書寫,以分號結尾。
MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
注釋 :使用-- 添加單行注釋時, -- 后面一定要加空格,而 #沒有要求。多行注釋 : /* 注釋 */3.3 SQL分類
DDL(Data Definition Language) : 數據定義語言,用來定義數據庫對象:數據庫,表,列等 DDL簡單理解就是用來操作數據庫,表等?
DML(Data Manipulation Language) 數據操作語言,用來對數據庫中表的數據進行增刪改 DML簡單理解就對表中數據進行增刪改?
DQL(Data Query Language) 數據查詢語言,用來查詢數據庫中表的記錄 ( 數據 )。 DQL 簡單理解就是對數據進行查詢操作。從數據庫表中查詢到我們想要的數據。 DCL(Data Control Language) 數據控制語言,用來定義數據庫的訪問權限和安全級別,及創建用戶。 DML 簡單理解就是對數據庫進行權限控制。比如我讓某一個數據庫表只能讓某一個用戶進行操作等。 注意: 以后我們最常操作的是 DML 和 DQL ,因為我們開發中最常操作的就是數據。4,DDL:操作數據庫
4.1 查詢
查詢所有的數據庫:
SHOW DATABASES ;4.2 創建數據庫
創建數據庫: CREATE DATABASE 數據庫名稱 ;創建數據庫(判斷,如果不存在則創建):
CREATE DATABASE IF NOT EXISTS 數據庫名稱;
4.3 刪除數據庫
刪除數據庫:
DROP DATABASE 數據庫名稱 ;?刪除數據庫(判斷,如果存在則刪除):
DROP DATABASE IF EXISTS 數據庫名稱 ;4.4 使用數據庫
使用數據庫:
USE 數據庫名稱 ;查看當前使用的數據庫:
?SELECT DATABASE();
5,DDL:操作表
5.1 查詢表
查詢當前數據庫下所有表名稱
SHOW TABLES ;?查詢表結構
DESC 表名稱 ;5.2 創建表
創建表
CREATE TABLE 表名 ( 字段名 1 數據類型 1, 字段名 2 數據類型 2, … 字段名 n 數據類型 n ) ;?注意:最后一行末尾,不能加逗號。
創建表:
?create table tb_user (
id int , username varchar ( 20 ) , password varchar ( 32 ) ) ; ?5.3 數據類型
MySQL 支持多種類型,可以分為三類:
數值:
tinyint : 小整數型,占一個字節
int : 大整數類型,占四個字節 eg : age int double : 浮點類型 使用格式: 字段名 double ( 總長度 , 小數點后保留的位數 ) eg : score double ( 5 , 2 ) 日期 : date : 日期值。只包含年月日 eg : birthday date : datetime : 混合日期和時間值。包含年月日時分秒 字符串 : 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;6,navicat使用
6.1 navicat概述
Navicat for MySQL 是管理和開發 MySQL 或 MariaDB 的理想解決方案。 這套全面的前端工具為數據庫管理、開發和維護提供了一款直觀而強大的圖形界面。 官網: http://www.navicat.com.cn6.2 navicat安裝
6.3 navicat使用
6.3.1 建立和mysql服務的連接
第一步: 點擊連接,選擇 MySQL?第二步:填寫連接數據庫必要的信息
?
6.3.2 操作
修改表結構。 編寫 SQL 語句并執行。7,DML
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,… ) …;7.2 修改數據
修改表數據
UPDATE 表名 SET 列名 1 = 值 1, 列名 2 = 值 2,… [ WHERE 條件 ] ;7.3 刪除數據
刪除數據 DELETE FROM 表名 [ WHERE 條件 ] ;8,DQL
8.1 基礎查詢
查詢多個字段 SELECT 字段列表 FROM 表名 ; SELECT * FROM 表名 ; -- 查詢所有數據 去除重復記錄? SELECT DISTINCT 字段列表 FROM 表名 ; 起別名 AS : AS 也可以省略
8.2 條件查詢
條件查詢
SELECT 字段列表 FROM 表名 WHERE 條件列表;
?
?模糊查詢
模糊查詢使用 like 關鍵字,可以使用通配符進行占位 : (1) _ : 代表單個任意字符 (2)% : 代表任意個數字符8.3 排序查詢
8.3.1 語法 SELECT 字段列表 FROM 表名 ORDER BY 排序字段名 1 [ 排序方式 1 ] , 排序字段名 2 [ 排序方式 2 ] …; 上述語句中的排序方式有兩種,分別是: ASC : 升序排列 (默認值) DESC : 降序排列 注意:如果有多個排序條件,當前邊的條件值一樣時,才會根據第二條件進行排序8.4 聚合函數
8.4.1 概念
將一列數據作為一個整體,進行縱向計算。
8.4.2 聚合函數分類
?
8.4.3 聚合函數語法
SELECT 聚合函數名 ( 列名 ) FROM 表 ; 注意: null 值不參與所有聚合函數運算。8.5 分組查詢
SELECT 字段列表 FROM 表名 [WHERE 分組前條件限定] GROUP BY 分組字段名 [HAVING 分組后條件過濾];
?注意:分組之后,查詢的字段為聚合函數和分組字段,查詢其他字段無任何意義
8.6 分頁查詢
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查詢條目數 ;?注意: 上述語句中的起始索引是從0開始。
?起始索引計算公式:
起始索引 = ( 當前頁碼 - 1 ) * 每頁顯示的條數9,約束
9.1 概念
約束是作用于表中列上的規則,用于限制加入表的數據。 例如:我們可以給 id 列加約束,讓其值不能重復,不能為 null 值。 約束的存在保證了數據庫中數據的正確性、有效性和完整性。 添加約束可以在添加數據的時候就限制不正確的數據,年齡是 3000 ,數學成績是 -5 分這樣無效的數據,繼而保障數據的 完整性。9.2 分類
非空約束: 關鍵字是 NOT NULL 保證列中所有的數據不能有 null 值。 例如: id 列在添加 馬花疼 這條數據時就不能添加成功。 唯一約束:關鍵字是 UNIQUE 保證列中所有數據各不相同。 例如: id 列中三條數據的值都是 1 ,這樣的數據在添加時是絕對不允許的。 主鍵約束: 關鍵字是 PRIMARY KEY 主鍵是一行數據的唯一標識,要求非空且唯一。一般我們都會給沒張表添加一個主鍵列用來唯一標識數據。 例如:上圖表中 id 就可以作為主鍵,來標識每條數據。那么這樣就要求數據中 id 的值不能重復,不能為 null 值。 檢查約束: 關鍵字是 CHECK 保證列中的值滿足某一條件。 例如:我們可以給 age 列添加一個范圍,最低年齡可以設置為 1 ,最大年齡就可以設置為 300 ,這樣的數據才更合理些。 注意: MySQL 不支持檢查約束。? 默認約束: 關鍵字是 DEFAULT 保存數據時,未指定值則采用默認值。 例如:我們在給 english 列添加該約束,指定默認值是 0 ,這樣在添加數據時沒有指定具體值時就會采用默認給定的 0 。 外鍵約束: 關鍵字是 FOREIGN KEY 外鍵用來讓兩個表的數據之間建立鏈接,保證數據的一致性和完整性。9.3 非空約束
概念 非空約束用于保證列中所有數據不能有 NULL 值 語法 添加約束 -- 創建表時添加非空約束 CREATE TABLE 表名 ( ????????列名 數據類型 NOT NULL , ????????… ) ; -- 建完表后添加非空約束 ALTER TABLE 表名 MODIFY 字段名 數據類型 NOT NULL ;刪除約束
ALTER TABLE 表名 MODIFY 字段名 數據類型 ;9.4 唯一約束
概念 唯一約束用于保證列中所有數據各不相同。 語法 添加約束 -- 創建表時添加唯一約束 CREATE TABLE 表名 ( 列名 數據類型 UNIQUE [ AUTO_INCREMENT ] , -- AUTO_INCREMENT: 當不指定值時自動增長 … ) ; CREATE TABLE 表名 ( 列名 數據類型 , … [ CONSTRAINT ] [ 約束名稱 ] UNIQUE ( 列名 ) ) ; -- 建完表后添加唯一約束 ALTER TABLE 表名 MODIFY 字段名 數據類型 UNIQUE ;?刪除約束
ALTER TABLE 表名 DROP INDEX 字段名 ;9.5 主鍵約束
概念 主鍵是一行數據的唯一標識,要求非空且唯一。 一張表只能有一個主鍵 語法 添加約束 -- 創建表時添加主鍵約束 CREATE TABLE 表名 ( 列名 數據類型 PRIMARY KEY [ AUTO_INCREMENT ] , … ) ; CREATE TABLE 表名 ( 列名 數據類型 , [ CONSTRAINT ] [ 約束名稱 ] PRIMARY KEY ( 列名 ) ) ; -- 建完表后添加主鍵約束 ALTER TABLE 表名 ADD PRIMARY KEY ( 字段名 ) ;?ALTER TABLE 表名 DROP PRIMARY KEY;
9.6 默認約束
概念 保存數據時,未指定值則采用默認值 語法 添加約束 -- 創建表時添加默認約束 CREATE TABLE 表名 ( 列名 數據類型 DEFAULT 默認值 , … ) ; -- 建完表后添加默認約束 ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默認值 ;?刪除約束
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT ;9.7?外鍵約束
9.8.1 概述
外鍵用來讓兩個表的數據之間建立鏈接,保證數據的一致性和完整性。9.8.2 語法
添加外鍵約束 -- 創建表時添加外鍵約束 CREATE TABLE 表名 ( 列名 數據類型 , … [ CONSTRAINT ] [ 外鍵名稱 ] FOREIGN KEY ( 外鍵列名 ) REFERENCES 主表 ( 主表列名 ) ) ; -- 建完表后添加外鍵約束 ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY ( 外鍵字段名稱 ) REFERENCES 主表名稱 ( 主表列名稱 ) ;刪除外鍵約束
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱 ;10,數據庫設計
2.1 數據庫設計簡介
軟件的研發步驟 數據庫設計概念 數據庫設計就是根據業務系統的具體需求,結合我們所選用的 DBMS ,為這個業務系統構造出最優的數據存儲模型。 建立數據庫中的 表結構 以及 表與表之間的關聯關系 的過程。 數據庫設計的步驟 需求分析(數據是什么 ? 數據具有哪些屬性 ? 數據與屬性的特點是什么) 邏輯分析(通過 ER 圖對數據庫進行邏輯建模,不需要考慮我們所選用的數據庫管理系統)?
物理設計(根據數據庫自身的特點把邏輯設計轉換為物理設計) 維護設計( 1. 對新的需求進行建表; 2. 表優化) 表關系 一對一 如:用戶 和 用戶詳情 一對一關系多用于表拆分,將一個實體中經常使用的字段放一張表,不經常使用的字段放另一張表,用于提升查詢性能。 一對多 如:部門 和 員工 一個部門對應多個員工,一個員工對應一個部門。如下圖: 多對多 如:商品 和 訂單 一個商品對應多個訂單,一個訂單包含多個商品。如下圖:?
2.2 表關系(一對多)?
一對多 如:部門 和 員工 一個部門對應多個員工,一個員工對應一個部門。 實現方式 在多的一方建立外鍵,指向一的一方的主鍵 案例 -- 刪除表 DROP TABLE IF EXISTS tb_emp; DROP TABLE IF EXISTS tb_dept; -- 部門表 CREATE TABLE tb_dept( id int primary key auto_increment, dep_name varchar(20), addr varchar(20) ); -- 員工表 CREATE TABLE tb_emp( id int primary key auto_increment, name varchar(20), age int, dep_id int, -- 添加外鍵 dep_id,關聯 dept 表的id主鍵 CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES tb_dept(id) );?查看表結構模型圖:
2.3 表關系(多對多)
多對多 如:商品 和 訂單 一個商品對應多個訂單,一個訂單包含多個商品 實現方式 建立第三張中間表,中間表至少包含兩個外鍵,分別關聯兩方主鍵 案例?建表語句如下:
-- 刪除表 DROP TABLE IF EXISTS tb_order_goods; DROP TABLE IF EXISTS tb_order; DROP TABLE IF EXISTS tb_goods; -- 訂單表 CREATE TABLE tb_order( id int primary key auto_increment, payment double(10,2), payment_type TINYINT, status TINYINT );-- 商品表 CREATE TABLE tb_goods( id int primary key auto_increment, title varchar(100), price double(10,2) );-- 訂單商品中間表 CREATE TABLE tb_order_goods( id int primary key auto_increment, order_id int, goods_id int, count int );-- 建完表后,添加外鍵 alter table tb_order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES tb_order(id); alter table tb_order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES tb_goods(id);?查看表結構模型圖:
?
2.4 表關系(一對一)
一對一 如:用戶 和 用戶詳情 一對一關系多用于表拆分,將一個實體中經常使用的字段放一張表,不經常使用的字段放另一張表,用于提升查詢性能 實現方式 在任意一方加入外鍵,關聯另一方主鍵,并且設置外鍵為唯一 (UNIQUE) 案例 create table tb_user_desc ( id int primary key auto_increment, city varchar(20), edu varchar(10), income int, status char(2), des varchar(100) );、create table tb_user ( id int primary key auto_increment, photo varchar(100), nickname varchar(50), age int, gender char(1), desc_id int unique, -- 添加外鍵 CONSTRAINT fk_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id) );?查看表結構模型圖:
11,多表查詢
11.1 內連接查詢
-- 隱式內連接 SELECT 字段列表 FROM 表 1, 表 2… WHERE 條件 ; -- 顯示內連接 SELECT 字段列表 FROM 表 1 [ INNER ] JOIN 表 2 ON 條件 ;內連接相當于查詢 A B 交集數據
?
?
11.2 外連接查詢
-- 左外連接 SELECT 字段列表 FROM 表 1 LEFT [ OUTER ] JOIN 表 2 ON 條件 ; -- 右外連接 SELECT 字段列表 FROM 表 1 RIGHT [ OUTER ] JOIN 表 2 ON 條件 ; 左外連接:相當于查詢 A 表所有數據和交集部分數據。 右外連接:相當于查詢 B 表所有數據和交集部分數據。?
11.3 子查詢
概念:查詢中嵌套查詢,稱嵌套查詢為子查詢。總結
以上是生活随笔為你收集整理的猿创征文 | MySQL从基础到高级的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年中山大学CS夏令营
- 下一篇: 虚拟机未正常关闭,结果再次启动的时候打不