MySQL資料庫基礎知識及操作
- 一、資料庫分類
- 二、SQL分類
- 三、資料型別
- 四、資料庫的操作
- 五、資料庫表的操作
- 六、MySQL表的增刪改查(CRUD)
- 6.1 新增(Create)
- 6.2 查詢(Retrieve)
- 1. 全列查詢
- 2. 指定列查詢
- 3. 別名
- 4. 去重(DISTINCT)
- 5. 排序(ORDER BY)
- 6. 條件查詢(WHERE)
- 7. 分頁查詢(LIMIT)
- 8. 模糊查詢(LIKE)
- 9. 范圍查詢
- 10. 運算子
- 6.3 修改(Update)
- 6.4 洗掉(Delete)
- 例子
一、資料庫分類
關系型資料庫(RSBMS):采用了關系模型來組織資料的資料庫,基于標準的SQL,只是內部實作有一些區別,常用的關系型資料庫包括:Oracle,MySQL,SQL server,PostgressSQL
非關系型資料庫:不規定基于SQL實作,更多的是指NoSQL資料庫,如:1.基于鍵值對:memcached,redis;2.基于檔案:mongodb;3.基于列族:hbase;4.基于圖:neo4j
二、SQL分類
- SQL(Structure Query Language)結構化查詢語言
- SQL分類
DDL:資料定義語言,用來維護存盤資料的結構,代表指令:create,drop,alter
DML:資料操縱語言,用來對資料進行操作,例如:insert,delete,update,DML中又單獨分了一個DQL(資料查詢語言),代表指令:select
DCL:資料控制語言,主要負責權限管理和事務,代表指令:grant,revoke,commit
三、資料型別
MySQL支持的常用資料型別
- 數值型別:TINYINT,INT,FLOAT(M,D)等
- 字串型別:VARCGAR(SIZE),TEXT等
- 日期型別:DATATIME,TIMESTAMP等
四、資料庫的操作
顯示當前的資料庫
SHOE DATABASES;
創建資料庫
CREATE TABLE 資料庫名稱;
-- 如果系統沒有 db_test 的資料庫,則創建一個使用utf8mb4字符集的 db_test 資料庫,如果有則不創建
CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4;
使用資料庫
use 資料庫名;
洗掉資料庫
DROP DATABASE [IF EXISTS] 資料庫名;
-- 資料庫洗掉以后,內部看不到對應的資料庫,里邊的表和資料全部被洗掉
五、資料庫表的操作
查看表
-- 查看表結構
desc 表名
-- 查看某個資料庫下的所有表
show tables;
創建表
CREATE TABLE 表名(欄位名稱 欄位型別(長度) 約束,欄位名稱 欄位型別(長度) 約束...)
洗掉表
DROP TABLE 表名;
六、MySQL表的增刪改查(CRUD)
6.1 新增(Create)
-- 向表中插入全列資料
INSERT INTO 表名 VALUES
(值1,值2...),
(值1,值2...),
...;
-- 向表中插入指定列資料
INSERT INTO 表名 (列名1,列名2) VALUES
(值1,值2),
(值1,值2),
...;
6.2 查詢(Retrieve)
1. 全列查詢
SELECT * FROM 表名;
2. 指定列查詢
SELECT 列明1,列明2... FROM 表名;
3. 別名
-- 為查詢結果中的列指定別名
SELECT 列明 AS 別名 FROM 表名;
-- AS可以省略
SELECT 列明 別名 FROM 表名;
4. 去重(DISTINCT)
-- 使用DISTINCT關鍵字對某列資料進行去重
SELECT DISTINCT 列明 FROM 表名;
5. 排序(ORDER BY)
-- ASC為升序(從小到大)
-- DESC為降序(從大到小)
-- 默認為ASC
SELECT 列明1,列明2... FROM 表名 ORDER BY 列名; -- 升序
SELECT 列明1,列明2... FROM 表名 ORDER BY 列名 DESC; -- 降序
6. 條件查詢(WHERE)
SELECT 列明1,列明2... FROM 表名 WHERE 條件;
7. 分頁查詢(LIMIT)
-- 從s開始,篩選n條結果
SELECT ... FROM 表名 [WHERE] [ORDER BY ...]LIMIT n OFFSET s;
8. 模糊查詢(LIKE)
-- % 匹配任意多個字符(包括0個)
SELECT name FROM exam_result WHERE name LIKE '孫%';
SELECT name FROM exam_result WHERE name LIKE '%孫%';
-- _ 匹配嚴格的1個任意字符
SELECT name FROM exam_result WHERE name LIKE '孫_';
9. 范圍查詢
(1) BETWEEN…AND…
SELECT 列明1,列明2... FROM 表名 WHERE...BETWEEN...AND...;
-- 查詢語文成績在[80,90]分的同學及語文成績
SELECT name,chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
-- 使用AND也可以實作
SELECT name,chinese FROM exam_result WHERE chinese>=80 AND chinese<=90;
(2) IN
SELECT 列明1,列明2... FROM 表名 WHERE...IN...;
-- 查詢數學成績在是58或者59或者98或者99的同學及數學成績
SELECT name,math FROM exam_result WHERE math IN(58,59,98,99);
-- 使用OR也可以實作
SELECT name,math FROM exam_result WHERE math=58 OR math=59 ORmath=98 ORmath=99;
10. 運算子
比較運算子
| 運算子 | 說明 |
|---|---|
| >,>=,<,<= | 大于,大于等于,小于,小于等于 |
| = | 等于 ,NULL不安全,例如NULL=NULL的結果是NULL |
| <=> | 等于, NULL安全,例如NULL=NULL的結果是 TRUE(1) |
| !=,<> | 不等于 |
| BETWEEN a0 AND a1 | 范圍匹配,[a0,a1],如果a0<=value<=a1,回傳TRUE(1) |
| IN(option,…) | 如果是option中的任意一個,回傳TRUE(1) |
| IS NULL | 是NULL |
| IS NOT NULL | 不是NULL |
| LIKE | 模糊匹配,%表示任意多個(包括0個字符),_表示任意一個字符 |
邏輯運算子
| 運算子 | 說明 |
|---|---|
| AND | 多個條件必須都為TRUE(1),結果才是TRUE(1) |
| OR | 任意一個條件為TRUE(1),結果為TRUE(1) |
| NOT | 條件為TRUE(1),結果為FALSE(0) |
注意:
- WHERE條件可以使用運算式,但不能使用別名
- AND的優先級高于OR,在同時使用時,需要使用小括號()包裹優先執行的部分
6.3 修改(Update)
UPDATE 表名 SET 欄位1 =值1,欄位2 =值2...WHERE條件
6.4 洗掉(Delete)
DELETE FROM 表名 WHERE條件
例子
-- 創建學生表
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
SN INT COMMENT '學號',
name VARCHAR(20) comment '姓名',
qq_mail VARCHAR(20) comment 'QQ郵箱');
-- 創建考試成績表
DROP TABLE IF EXISTS exam_result;
CREATE TABLE exam_result(
id INT,
name VARCHAR(20),
chinese DECIMAL(3,1),
math DECIMAL(3,1),
english DECIMAL(3,1)) ;
-- 插入資料
INSERT INTO exam_result VALUES
(1,'張三',67,98,56),
(2,'李四',87.5,78,77),
(3,'王五',88,98.5,90),
(4,'趙六',82,84,67),
(5,'孫行者',55.5,85,45),
(6,'行者孫',70,73.5,78.5),
(7,'者行孫',70,73.5,78.5),
(8,'孫權',75,65,30);
-- 全列查詢
SELECT * FROM exam_result;
-- 指定列查詢
SELECT id,name,chinese FROM exam_result;
-- 查詢欄位為運算式
-- 1. 運算式不包含欄位
SELECT id,name,10 FROM exam_result;
-- 2. 運算式包含1個欄位
SELECT id,name,english+10 FROM exam_result;
-- 3. 運算式包含多個欄位
SELECT id,name,chinese+math+english FROM exam_result;
-- 別名
SELECT id,name,chinese+english+math as 總分 FROM exam_result;
SELECT id,name,chinese+english+math 總分 FROM exam_result;
-- 去重復:對某列資料進行去重
SELECT DISTINCT math from exam_result;
-- 條件查詢:查詢英語不及格的同學及英語成績
SELECT name,english FROM exam_result WHERE english<60;
-- 模糊查詢:LIKE
-- % 匹配任意多個字符(包括0個)
SELECT name FROM exam_result WHERE name LIKE '孫%';
SELECT name FROM exam_result WHERE name LIKE '%孫%';
-- _ 匹配嚴格的1個任意字符
SELECT name FROM exam_result WHERE name LIKE '孫_';
-- 排序
SELECT name,math FROM exam_result ORDER BY math;
SELECT name,math FROM exam_result ORDER BY math DESC;
SELECT name,math,english,chinese FROM exam_result ORDER BY english,math DESC,chinese;
--分頁查詢
-- 起始下標為 0
-- 按 id 進行分頁,每頁 3 條記錄,分別顯示 第 1、2、3 頁
-- 第 1 頁
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 0;
-- 第 2 頁
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 3;
-- 第 3 頁,如果結果不足 3 個,不會有影響
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;
-- 修改
-- 將張三同學的數學成績變更為 80 分
UPDATE exam_result SET math = 80 WHERE name = '張三';
-- 將李四同學的數學成績變更為 60 分,語文成績變更為 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '李四';
-- 將總成績倒數前三的 3 位同學的數學成績加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3;
-- 將所有同學的語文成績更新為原來的 2 倍
UPDATE exam_result SET chinese = chinese * 2;
-- 洗掉
-- 洗掉趙六同學的考試成績
DELETE FROM exam_result WHERE name = '趙六';
-- 洗掉整表資料
DELETE FROM exam_result;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/278142.html
標籤:其他
上一篇:Redis事務機制
下一篇:java筆記--資料庫(1)
