2017年07月05號課堂筆記
2017年07月05號 星期三 多雲 空氣質量:中度汙染
內容:mysql第五節課+MySQL自測考試
表連接查詢:內連接,左右外連接,自連接
事務:事務的特性 ACID,demo(模擬 銀行轉賬)開啟,回滾,提交,關閉/開啟事務自動提交
一、表連接查詢
1、概念:
1)內連接 : 通過匹配兩個表中公共列,找到 公共的行!
2)左外連接: 以左表為準,右表中沒有數據返回null
3)右外連接: 以右表為準,左表中沒有數據返回null
4)自連接: 把一個表當成多個表來使用 關鍵是 使用別名
2、demo
1)內連接和隱式內連接
-- 輸出學生姓名以及對應的年級名稱 內連接
SELECT StudentName,GradeName FROM student INNER JOIN grade
ON student.`GradeId`=grade.`GradeID`
-- 隱式內連接
SELECT StudentName,GradeName FROM student,grade
WHERE student.`GradeId`=grade.`GradeID`
2)查詢 考試 課程編號是1的 學生姓名 以及年級名稱 和科目名稱以及成績
01.
SELECT s.StudentName,GradeName,SubjectName ,studentResult FROM student s
INNER JOIN grade g ON (s.gradeID=g.gradeID)
INNER JOIN `subject` b ON(g.gradeID=b.gradeID)
INNER JOIN result r ON (b.subjectNo=r.subjectNo)
AND s.studentNo=r.studentNo
AND b.subjectNo=1
02.
SELECT StudentName,GradeName,SubjectName ,studentResult FROM
student s,grade g,`subject` b,result r
WHERE s.gradeID=g.gradeID
AND g.gradeID=b.gradeID
AND s.studentNo=r.studentNo
AND b.subjectNo=r.subjectNo
AND b.subjectNo=1
3)左外連接和右外連接
-- 左外連接
SELECT * FROM grade LEFT JOIN student
ON grade.GradeID=student.gradeid;
-- 右外連接
SELECT * FROM grade RIGHT JOIN student
ON grade.GradeID=student.gradeid;
4)查詢的列 不在同一個表中! 必須使用連接查詢!建立關聯關系!
-- 臨時表只有當前連接可見 隨連接的關閉 自動刪除
-- 臨時表的增刪改 不會影響到 真表
CREATE TEMPORARY TABLE myStudent
(SELECT * FROM student)
SELECT * FROM myStudent
DELETE FROM mystudent -- 臨時表的數據刪除
SELECT * FROM student -- 不會影響到真表
5)自連接
SELECT * FROM teacher
-- 查詢 老師3 的姓名和 對應的 導師的姓名
-- t1 老師 t2 導師 老師的導師編號=== 導師的編號
SELECT t1.`name` AS a,t2.`name` AS 導師姓名 FROM teacher t1,teacher t2
WHERE t1.`name`=‘老師3‘
AND t2.id=t1.tid
二、事務
1、事務的概念及特性
1)事務:一條或者多條sql語句的集合!
2)事務的特性 ACID
①原子性 (Atomicity):在事務中的操作,要麽都執行,要麽都不執行!
②一致性(Consistency):事務必須保證數據庫從一個一致性的狀態變成另一個一致性的狀態!
③隔離性(Isolation):每個事務之間互不幹擾!哪怕是並發執行也不幹擾!
④持久性(Durability):事務一旦被改變,那麽對數據庫中數據的影響是永久性的!
2.demo(模擬 銀行轉賬)
1)-- 創建數據庫
CREATE DATABASE myBank;
-- 切換指定的數據庫
USE myBank;
-- 創建表
CREATE TABLE IF NOT EXISTS bank(
customerName VARCHAR(10) NOT NULL COMMENT ‘用戶名‘,
currentMoney DECIMAL(10,2) NOT NULL COMMENT ‘賬戶余額‘
);
-- 插入數據
INSERT INTO bank VALUES(‘小黑‘,50000),(‘小白‘,500000);
-- 小黑 給小白 轉賬10000
-- 修改兩條數據
-- 01.小黑-10000
-- 02.小白+10000
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName=‘小黑‘;
-- 故意寫錯字段名稱 讓02 報錯
UPDATE bank SET currentMoneysss=currentMoney+10000
WHERE customerName=‘小白‘;
2)-- 開啟事務 START TRANSACTION 或者 BEGIN
-- 01.02 為一個事務
BEGIN
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName=‘小黑‘;
UPDATE bank SET currentMoneysss=currentMoney+10000
WHERE customerName=‘小白‘;
-- 事務回滾 ROLLBACK
-- 提交事務 COMMIT
UPDATE bank SET currentMoney=500000
WHERE customerName=‘小黑‘;
-- 證明mysql是默認提交事務的!
3)SET autocommit=0(關閉事務自動提交) | 1(開啟事務自動提交)
-- 關閉事務自動提交
SET autocommit=0;
BEGIN; -- 開啟事務
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName=‘小黑‘;
UPDATE bank SET currentMoney=currentMoney+10000
WHERE customerName=‘小白‘;
COMMIT; -- 手動提交事務
UPDATE bank SET currentMoney=10000;
ROLLBACK; -- 事務回滾
SET autocommit=1; -- 恢復自動提交
三、MySQL自測考試
1.cmd 命令後 使用mysql的root用戶登錄語句
自己答案:
2.創建一個用戶並給用戶授權,刷新權限
自己答案:
3.創建一個名稱為T13的數據庫
自己答案:
4.切換到T13數據庫
自己答案:
5.創建一個Teacher 表
字段有
id 主鍵 不為空
name
age
address
teacherID 代表導師的編號
創建成功後,給teacher表添加一個sex字段
自己答案:
6.創建一個Student表
id 主鍵 不為空
age
name
tid 代表對應的教師編號
自己答案:
7.給兩個表中 新增 至少5條測試數據
自己答案:
8.創建teacher表和student表的 主外鍵關系
提示: 外鍵關系應該建立在 從表上
自己答案:
9.查詢 年齡在20 到 25之間的 學生姓名以及對應的老師姓名
自己答案:
10.查詢老師的姓名和對應導師的姓名 (自身連接)
自己答案:
11.查詢老師的平均,最大,最小年齡
自己答案:
12.查詢年齡最大的前2名學生信息,並按照 降序排列
自己答案:
13. sql結構化查詢語言的分類,並寫出相應的單詞
自己答案:
14.常見的約束名稱以及關鍵字?
自己答案:
15.在模糊查詢中 % 和 _ 的區別
自己答案:
16.sql語句的執行順序
自己答案:
17.mysql中 獲取時間的函數 至少4個
自己答案:
18.有符號和無符號的區別,以及關鍵字是什麽!zerofill的作用
自己答案:
19.MyISAM 和InnoDB兩種引擎的區別
自己答案:
20. MYD,MYI,frm,ibd結尾的文件保存什麽
自己答案:
四、老師辛苦了!
2017年07月05號課堂筆記