1. 程式人生 > >2017年07月05號課堂筆記

2017年07月05號課堂筆記

開啟 pda 獲取 賬戶 rom 隔離 delet 內容 不為

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號課堂筆記