MySQL多表查询和事务安全
目錄
一、DQL語句
1.條件查詢
(1)比較運算符
(2)邏輯運算符
(3)范圍
(4)模糊查詢
(5)排序
(6)聚合函數
(7)分組
(8)limit語句
二、數據庫的約束
1.主鍵(PRIMARY KEY)
(1)主鍵的作用
(2)主鍵的特點
(3)創建主鍵
(4)刪除主鍵
(5)主鍵自增
2.唯一(UNIQUE)
3.非空(NOT NULL)
4.默認(DEFAULT)
5.外鍵(FOREIGN KEY)
(1)新建表時增加外鍵
(2)已有表增加外鍵
(3)刪除外鍵
(4)外鍵的級聯
三、多表查詢
1.多表查詢的分類
2.內連接
(1)隱式內連接
(2)顯示內連接
3.外連接
(1)左外連接
(2)右外連接
4.子查詢
四、事務安全
1.操作事務
2.事務原理
3.回滾點
(1)作用
(2)設置回滾點語法
(3)回到回滾點語法
4.事務的四大特性
5.事務的隔離級別
一、DQL語句
1.條件查詢
準備數據
CREATE TABLE student3 ( id INT, NAME VARCHAR(20), age INT, sex VARCHAR(5), address VARCHAR(100), math INT, english INT );INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'馬云',55,'男','杭 州',66,78),(2,'馬化騰',45,'女','深圳',98,87),(3,'馬景濤',55,'男','香港',56,77),(4,'柳 巖',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'劉德華',57,'男','香港',99,99), (7,'馬德',22,'女','香港',99,99),(8,'德瑪西亞',18,'男','南京',56,65);(1)比較運算符
大于 ?> ????小于??<? ? ? ? ?小于等于 <=
等于? = ???不等于<> 、!=
①查詢math分數大于80分的學生
SELECT * FROM ?student3 ?WHERE math>80;②查詢english分數小于或等于80分的學生
SELECT * FROM student3 WHERE english<=80③查詢age等于20歲的學生
SELECT * FROM student3 WHERE age=20④查詢age不等于20歲的學生
SELECT * FROM student3 WHERE age!=20(2)邏輯運算符
and:多個條件同時滿足
or:多個條件滿足其中一個
not(!)不滿足
①查詢age大于35且性別為男的學生(兩個條件同時滿足)
SELECT * FROM student3 WHERE age>35 AND sex='男'②查詢age大于35或性別為男的學生(兩個條件其中一個滿足)
SELECT * FROM student3 WHERE age>35 OR sex='男'In關鍵字: select 字段名 from 表名 where 字段 in(數據1,數據2)
in里面的每個數據會作為一次條件,只要滿足條件就會顯示
In列表的值類型必須一致或兼容
In列表里的值不能使用模糊查詢
③查詢id是1或3或5的學生
SELECT * FROM student3 WHERE id IN(1,3,5)④查詢id不是1或3或5的學生
SELECT * FROM student3 WHERE id NOT IN(1,3,5)(3)范圍
BETWEEN 值1 AND 值2
①查詢english成績大于等于75,且小于等于90的學生
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90(4)模糊查詢
LIKE表示模糊查詢。
? ? ? ? ? SELECT * FROM 表名 WHERE 字段名 LIKE ‘通配符字符串’
通配符字符串有兩個:
%:表示0個或多個字符
_:表示一個字符
①查詢姓馬的學生
SELECT * FROM student3 WHERE NAME LIKE '馬%'②查詢姓名中包含'德'字的學生
SELECT * FROM student3 WHERE NAME LIKE'%德%'③查詢姓馬,且姓名有三個字的學生
SELECT * FROM student3 WHERE NAME LIKE'馬__'(5)排序
ORDER BY
? ? ? ? ? ? ??ASC:升序
? ? ? ? ? ? ?DESC:降序
①單列排序
查詢所有數據,使用年齡降序排序
SELECT * FROM student3 ORDER BY age DESC②組合排序
查詢所有數據,在年齡降序排序的基礎上,如果年齡相同再以數學成績降序排序
SELECT * FROM student3 ORDER BY age DESC,age ASC(6)聚合函數
count():統計指定列記錄數,NULL的不統計
sum():計算指定列的數值和,如果不是數值類型,結果為0
max():計算指定列的最大值
min():計算指定列的最小值
avg():計算指定列的平均值
①查詢學生總數
SELECT COUNT(*) FROM student3②查詢年齡大于40的總數
SELECT COUNT(*) FROM student3 WHERE age>40③查詢數學成績總分
SELECT SUM(math) FROM student3④查詢數學成績平均分
SELECT AVG(math) FROM student3⑤查詢數學成績最高分
SELECT MAX(math) FROM student3⑥查詢數學成績最低分
SELECT MIN(math) FROM student3(7)分組
GROUP BY
? ? ? ? ? ? SELECT 字段1,字段2... FROM 表名
? ? ? ? ? ? GROUP BY 分組字段 [HAVING 條件];
①按性別分組
SELECT sex FROM student3 GROUP BY sex②查詢男女各多少人
SELECT sex,COUNT(*) FROM student3 GROUP BY sex③查詢年齡大于25歲的人,按性別分組,統計每組的人數
SELECT sex,COUNT(*) FROM student3 WHERE age>25 GROUP BY sex④查詢年齡大于25歲的人,按性別分組,統計每組的人數,并只顯示性別人數大于2的數據
SELECT sex,COUNT(*) FROM student3 WHERE age>25 GROUP BY sex HAVING COUNT(*)>2having與where的區別:
①having是在分組后對數據進行過濾,可以使用聚合函數
②where是在分組前對數據進行過濾,不可以使用聚合函數
(8)limit語句
限制查詢記錄的條數
LIMIT offset,length ?
? ? ? ? ? ?offset是指偏移量,默認為0
? ? ? ? ? ?length是指需要顯示的總記錄數
①查詢學生表中數據,從第三條開始顯示,顯示6條
SELECT * FROM student3 LIMIT 2,6二、數據庫的約束
1.主鍵(PRIMARY KEY)
(1)主鍵的作用
唯一標識一條記錄
(2)主鍵的特點
①唯一
②不能包含NULL值
(3)創建主鍵
①在創建表的時候給字段添加主鍵
? ? ? ? ? ? ? ? ? 字段名 字段類型 PRIMARY KEY
②在已有表中添加主鍵
? ? ? ? ? ? ? ? ? ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
(4)刪除主鍵
? ? ? ? ? ? ? ? ? ALTER TABLE 表名 DROP PRIMARY KEY;
(5)主鍵自增
字段名 字段類型 PRIMARY KEY ?AUTO_INCREMENT
DELETE和TRUNCATE的區別:
①DELETE 刪除表中的數據,但不重置AUTO_INCREMENT的值。
②TRUNCATE 摧毀表,重建表,AUTO_INCREMENT重置為1。
2.唯一(UNIQUE)
字段名 字段類型 UNIQUE
3.非空(NOT NULL)
字段名 字段類型 NOT NULL
4.默認(DEFAULT)
字段名 字段類型 DEFAULT 默認值
5.外鍵(FOREIGN KEY)
(1)新建表時增加外鍵
[CONSTRAINT] [外鍵約束名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主鍵字段名)
(2)已有表增加外鍵
ALTER TABLE 從表 ADD [CONSTRAINT] [外鍵約束名稱] FOREIGN KEY (外鍵字段名) REFERENCES 主表(主鍵字段名);
(3)刪除外鍵
ALTER TABLE 從表 drop foreign key 外鍵名稱;
(4)外鍵的級聯
在修改和刪除主表的主鍵時,同時更新或刪除副表的外鍵值,稱為級聯操作。
ON UPDATE CASCADE:級聯更新
ON DELETE CASCADE:級聯刪除
三、多表查詢
1.多表查詢的分類
2.內連接
(1)隱式內連接
看不到JOIN 關鍵字,條件使用WHERE 指定 SELECT 字段名 FROM 左表, 右表 WHERE 條件;
(2)顯示內連接
使用INNER JOIN ... ON 語句, 可以省略INNER SELECT 字段名 FROM 左表 INNER JOIN 右表 ON 條件;
3.外連接
(1)左外連接
使用LEFT OUTER JOIN ... ON,OUTER 可以省略
在內連接的基礎上保證左表的數據全部顯示
(2)右外連接
使用RIGHT OUTER JOIN ... ON , OUTER 可以省略
在內連接的基礎上保證右表的數據全部顯示
4.子查詢
(1)子查詢的結果是一個值
(2)子查詢的結果是單列多行
(3)子查詢的結果是多列多行
?
總結:子查詢結果只要是單列,肯定在WHERE 后面作為條件
? ? ? ? ? ? ? ? ? ? ?SELECT 查詢字段 FROM 表 WHERE 字段=(子查詢);
? ? ? ? ? ?子查詢結果只要是多列,肯定在FROM 后面作為表
? ? ? ? ? ? ? ? ? SELECT 查詢字段 FROM (子查詢) 表別名 WHERE 條件;
四、事務安全
1.操作事務
(1)手動提交事務
start transaction:開啟事務
commit:提交事務
rollback:回滾事務
(2)自動提交事務
2.事務原理
事務開啟之后, 所有的操作都會臨時保存到事務日志, 事務日志只有在得到commit命令才會同步到數據表中,其他任何情況都會清空事務日志(rollback,斷開連接)。
3.回滾點
(1)作用
可以供后續操作返回到該位置,而不是返回所有操作,這個點稱為回滾點。
(2)設置回滾點語法
savepoint 回滾點名字;
(3)回到回滾點語法
rollback to 回滾點名字;
4.事務的四大特性
5.事務的隔離級別
事務在操作時的理想狀態:多個事務之間互不影響,如果隔離級別設置不當就可能引發并發訪問問題。
?
總結
以上是生活随笔為你收集整理的MySQL多表查询和事务安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 缓冲流、转换流、序列化流代码练习
- 下一篇: C3P0连接池、DRUID连接池和Jdb