(三)MySQL入门,看我就够了!!!
生活随笔
收集整理的這篇文章主要介紹了
(三)MySQL入门,看我就够了!!!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
課程目標
一、為什么要學習數據庫
二、數據庫的相關概念
DBMS、DB、SQL三、數據庫存儲數據的特點
四、初始MySQL
MySQL產品的介紹 MySQL產品的安裝 ★ MySQL服務的啟動和停止 ★MySQL服務的登錄和退出 ★ MySQL的常見命令和語法規范五、DQL語言的學習 ★
基礎查詢 ★ 條件查詢 ★ 排序查詢 ★ 常見函數 ★ 分組函數 ★ 分組查詢 ★ 連接查詢 ★ 子查詢 √ 分頁查詢 ★ union聯合查詢 √六、DML語言的學習 ★
插入語句 修改語句 刪除語句七、DDL語言的學習
庫和表的管理 √ 常見數據類型介紹 √ 常見約束 √八、TCL語言的學習
事務和事務處理九、視圖的講解 √
十、變量
十一、存儲過程和函數
十二、流程控制結構
課程內容
一、與MySQL的第一次親密接觸
數據庫的好處
1.持久化數據到本地 2.可以實現結構化查詢,方便管理數據庫相關概念
1、DB:數據庫,保存一組有組織的數據的容器 2、DBMS:數據庫管理系統,又稱為數據庫軟件(產品),用于管理DB中的數據 3、SQL:結構化查詢語言,用于和DBMS通信的語言數據庫存儲數據的特點
1、將數據放到表中,表再放到庫中 2、一個數據庫中可以有多個表,每個表都有一個的名字,用來標識自己。表名具有唯一性。 3、表具有一些特性,這些特性定義了數據在表中如何存儲,類似java中 “類”的設計。 4、表由列組成,我們也稱為字段。所有表都是由一個或多個列組成的,每一列類似java 中的”屬性” 5、表中的數據是按行存儲的,每一行類似于java中的“對象”。MySQL產品的介紹和安裝
MySQL服務的啟動和停止
方式一:計算機——右擊管理——服務 方式二:通過管理員身份運行 net start 服務名(啟動服務) net stop 服務名(停止服務)MySQL服務的登錄和退出
方式一:通過mysql自帶的客戶端 只限于root用戶方式二:通過windows自帶的客戶端 登錄: mysql 【-h主機名 -P端口號 】-u用戶名 -p密碼退出: exit或ctrl+CMySQL的常見命令
1.查看當前所有的數據庫 show databases; 2.打開指定的庫 use 庫名 3.查看當前庫的所有表 show tables; 4.查看其它庫的所有表 show tables from 庫名; 5.創建表 create table 表名(列名 列類型,列名 列類型,。。。 ); 6.查看表結構 desc 表名;7.查看服務器的版本 方式一:登錄到mysql服務端 select version(); 方式二:沒有登錄到mysql服務端 mysql --version 或 mysql --VMySQL的語法規范
1.不區分大小寫,但建議關鍵字大寫,表名、列名小寫 2.每條命令最好用分號結尾 3.每條命令根據需要,可以進行縮進 或換行 4.注釋單行注釋:#注釋文字單行注釋:-- 注釋文字多行注釋:/* 注釋文字 */SQL的語言分類
DQL(Data Query Language):數據查詢語言select DML(Data Manipulate Language):數據操作語言insert 、update、delete DDL(Data Define Languge):數據定義語言create、drop、alter TCL(Transaction Control Language):事務控制語言commit、rollbackSQL的常見命令
show databases; 查看所有的數據庫 use 庫名; 打開指定 的庫 show tables ; 顯示庫中的所有表 show tables from 庫名;顯示指定庫中的所有表 create table 表名(字段名 字段類型, 字段名 字段類型 ); 創建表desc 表名; 查看指定表的結構 select * from 表名;顯示表中的所有數據二、DQL語言的學習
進階1:基礎查詢
語法: SELECT 要查詢的東西 【FROM 表名】;類似于Java中 :System.out.println(要打印的東西); 特點: ①通過select查詢完的結果 ,是一個虛擬的表格,不是真實存在 ② 要查詢的東西 可以是常量值、可以是表達式、可以是字段、可以是函數進階2:條件查詢
條件查詢:根據條件過濾原始表的數據,查詢到想要的數據 語法: select 要查詢的字段|表達式|常量值|函數 from 表 where 條件 ;分類: 一、條件表達式示例:salary>10000條件運算符:> < >= <= = != <>二、邏輯表達式 示例:salary>10000 && salary<20000邏輯運算符:and(&&):兩個條件如果同時成立,結果為true,否則為falseor(||):兩個條件只要有一個成立,結果為true,否則為falsenot(!):如果條件成立,則not后為false,否則為true三、模糊查詢 示例:last_name like 'a%'進階3:排序查詢
語法: select要查詢的東西 from表 where 條件order by 排序的字段|表達式|函數|別名 【asc|desc】進階4:常見函數
一、單行函數 1、字符函數concat拼接substr截取子串upper轉換成大寫lower轉換成小寫trim去前后指定的空格和字符ltrim去左邊空格rtrim去右邊空格replace替換lpad左填充rpad右填充instr返回子串第一次出現的索引length 獲取字節個數2、數學函數round 四舍五入rand 隨機數floor向下取整ceil向上取整mod取余truncate截斷 3、日期函數now當前系統日期+時間curdate當前系統日期curtime當前系統時間str_to_date 將字符轉換成日期date_format將日期轉換成字符 4、流程控制函數if 處理雙分支case語句 處理多分支情況1:處理等值判斷情況2:處理條件判斷5、其他函數version版本database當前庫user當前連接用戶分組函數
sum 求和max 最大值min 最小值avg 平均值count 計數特點:1、以上五個分組函數都忽略null值,除了count(*)2、sum和avg一般用于處理數值型max、min、count可以處理任何數據類型3、都可以搭配distinct使用,用于統計去重后的結果4、count的參數可以支持:字段、*、常量值,一般放1建議使用 count(*)進階5:分組查詢
語法: select 查詢的字段,分組函數 from 表 group by 分組的字段特點: 1、可以按單個字段分組 2、和分組函數一同查詢的字段最好是分組后的字段 3、分組篩選針對的表 位置 關鍵字 分組前篩選: 原始表 group by的前面 where 分組后篩選: 分組后的結果集 group by的后面 having4、可以按多個字段分組,字段之間用逗號隔開 5、可以支持排序 6、having后可以支持別名進階6:多表連接查詢
笛卡爾乘積:如果連接條件省略或無效則會出現 解決辦法:添加上連接條件一、傳統模式下的連接 :等值連接——非等值連接
1.等值連接的結果 = 多個表的交集 2.n表連接,至少需要n-1個連接條件 3.多個表不分主次,沒有順序要求 4.一般為表起別名,提高閱讀性和性能二、sql99語法:通過join關鍵字實現連接
含義:1999年推出的sql語法 支持: 等值連接、非等值連接 (內連接) 外連接 交叉連接語法:select 字段,... from 表1 【inner|left outer|right outer|cross】join 表2 on 連接條件 【inner|left outer|right outer|cross】join 表3 on 連接條件 【where 篩選條件】 【group by 分組字段】 【having 分組后的篩選條件】 【order by 排序的字段或表達式】好處:語句上,連接條件和篩選條件實現了分離,簡潔明了!三、自連接
案例:查詢員工名和直接上級的名稱
sql99
SELECT e.last_name,m.last_name FROM employees e JOIN employees m ON e.`manager_id`=m.`employee_id`;sql92
SELECT e.last_name,m.last_name FROM employees e,employees m WHERE e.`manager_id`=m.`employee_id`;進階7:子查詢
含義:
一條查詢語句中又嵌套了另一條完整的select語句,其中被嵌套的select語句,稱為子查詢或內查詢 在外面的查詢語句,稱為主查詢或外查詢特點:
1、子查詢都放在小括號內 2、子查詢可以放在from后面、select后面、where后面、having后面,但一般放在條件的右側 3、子查詢優先于主查詢執行,主查詢使用了子查詢的執行結果 4、子查詢根據查詢結果的行數不同分為以下兩類: ① 單行子查詢結果集只有一行一般搭配單行操作符使用:> < = <> >= <= 非法使用子查詢的情況:a、子查詢的結果為一組值b、子查詢的結果為空② 多行子查詢結果集有多行一般搭配多行操作符使用:any、all、in、not inin: 屬于子查詢結果中的任意一個就行any和all往往可以用其他查詢代替進階8:分頁查詢
應用場景:
實際的web項目中需要根據用戶的需求提交對應的分頁查詢的sql語句語法:
select 字段|表達式,... from 表 【where 條件】 【group by 分組字段】 【having 條件】 【order by 排序的字段】 limit 【起始的條目索引,】條目數;特點:
1.起始條目索引從0開始2.limit子句放在查詢語句的最后3.公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage 假如: 每頁顯示條目數sizePerPage 要顯示的頁數 page進階9:聯合查詢
引入:
union 聯合、合并語法:
select 字段|常量|表達式|函數 【from 表】 【where 條件】 union 【all】 select 字段|常量|表達式|函數 【from 表】 【where 條件】 union 【all】 select 字段|常量|表達式|函數 【from 表】 【where 條件】 union 【all】 ..... select 字段|常量|表達式|函數 【from 表】 【where 條件】特點:
1、多條查詢語句的查詢的列數必須是一致的 2、多條查詢語句的查詢的列的類型幾乎相同 3、union代表去重,union all代表不去重三、DML語言
插入
語法:
insert into 表名(字段名,...) values(值1,...);特點:
1、字段類型和值類型一致或兼容,而且一一對應 2、可以為空的字段,可以不用插入值,或用null填充 3、不可以為空的字段,必須插入值 4、字段個數和值的個數必須一致 5、字段可以省略,但默認所有字段,并且順序和表中的存儲順序一致修改
修改單表語法:
update 表名 set 字段=新值,字段=新值 【where 條件】修改多表語法:
update 表1 別名1,表2 別名2 set 字段=新值,字段=新值 where 連接條件 and 篩選條件刪除
方式1:delete語句
單表的刪除: ★
delete from 表名 【where 篩選條件】多表的刪除:
delete 別名1,別名2 from 表1 別名1,表2 別名2 where 連接條件 and 篩選條件;方式2:truncate語句
truncate table 表名兩種方式的區別【面試題】
#1.truncate不能加where條件,而delete可以加where條件#2.truncate的效率高一丟丟#3.truncate 刪除帶自增長的列的表后,如果再插入數據,數據從1開始 #delete 刪除帶自增長列的表后,如果再插入數據,數據從上一次的斷點處開始#4.truncate刪除不能回滾,delete刪除可以回滾四、DDL語句
庫和表的管理
庫的管理:
一、創建庫 create database 庫名 二、刪除庫 drop database 庫名表的管理:
#1.創建表CREATE TABLE IF NOT EXISTS stuinfo(stuId INT,stuName VARCHAR(20),gender CHAR,bornDate DATETIME );DESC studentinfo; #2.修改表 alter 語法:ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段類型】;#①修改字段名 ALTER TABLE studentinfo CHANGE COLUMN sex gender CHAR;#②修改表名 ALTER TABLE stuinfo RENAME [TO] studentinfo; #③修改字段類型和列級約束 ALTER TABLE studentinfo MODIFY COLUMN borndate DATE ;#④添加字段ALTER TABLE studentinfo ADD COLUMN email VARCHAR(20) first; #⑤刪除字段 ALTER TABLE studentinfo DROP COLUMN email;#3.刪除表DROP TABLE [IF EXISTS] studentinfo;常見類型
整型:小數:浮點型定點型 字符型: 日期型: Blob類型:常見約束
NOT NULL DEFAULT UNIQUE CHECK PRIMARY KEY FOREIGN KEY數據庫事務
含義
通過一組邏輯操作單元(一組DML——sql語句),將數據從一種狀態切換到另外一種狀態特點
(ACID) 原子性:要么都執行,要么都回滾 一致性:保證數據的狀態操作前和操作后保持一致 隔離性:多個事務同時操作相同數據庫的同一個數據時,一個事務的執行不受另外一個事務的干擾 持久性:一個事務一旦提交,則數據將持久化到本地,除非其他事務對其進行修改相關步驟:
1、開啟事務 2、編寫事務的一組邏輯操作單元(多條sql語句) 3、提交事務或回滾事務事務的分類:
隱式事務,沒有明顯的開啟和結束事務的標志
比如 insert、update、delete語句本身就是一個事務顯式事務,具有明顯的開啟和結束事務的標志
1、開啟事務取消自動提交事務的功能2、編寫事務的一組邏輯操作單元(多條sql語句)insertupdatedelete3、提交事務或回滾事務使用到的關鍵字
set autocommit=0; start transaction; commit; rollback;savepoint 斷點 commit to 斷點 rollback to 斷點事務的隔離級別:
事務并發問題如何發生?
當多個事務同時操作同一個數據庫的相同數據時事務的并發問題有哪些?
臟讀:一個事務讀取到了另外一個事務未提交的數據 不可重復讀:同一個事務中,多次讀取到的數據不一致 幻讀:一個事務讀取數據時,另外一個事務進行更新,導致第一個事務讀取到了沒有更新的數據如何避免事務的并發問題?
通過設置事務的隔離級別 1、READ UNCOMMITTED 2、READ COMMITTED 可以避免臟讀 3、REPEATABLE READ 可以避免臟讀、不可重復讀和一部分幻讀 4、SERIALIZABLE可以避免臟讀、不可重復讀和幻讀設置隔離級別:
set session|global transaction isolation level 隔離級別名;查看隔離級別:
select @@tx_isolation;五、視圖
含義:理解成一張虛擬的表
視圖和表的區別:
使用方式 占用物理空間視圖 完全相同 不占用,僅僅保存的是sql邏輯表 完全相同 占用視圖的好處:
1、sql語句提高重用性,效率高 2、和表實現了分離,提高了安全性視圖的創建
語法: CREATE VIEW 視圖名 AS 查詢語句;視圖的增刪改查
1、查看視圖的數據 ★SELECT * FROM my_v4; SELECT * FROM my_v1 WHERE last_name='Partners';2、插入視圖的數據 INSERT INTO my_v4(last_name,department_id) VALUES('虛竹',90);3、修改視圖的數據UPDATE my_v4 SET last_name ='夢姑' WHERE last_name='虛竹';4、刪除視圖的數據 DELETE FROM my_v4;某些視圖不能更新
包含以下關鍵字的sql語句:分組函數、distinct、group by、having、union或者union all 常量視圖 Select中包含子查詢 join from一個不能更新的視圖 where子句的子查詢引用了from子句中的表視圖邏輯的更新
#方式一: CREATE OR REPLACE VIEW test_v7 AS SELECT last_name FROM employees WHERE employee_id>100;#方式二: ALTER VIEW test_v7 AS SELECT employee_id FROM employees;SELECT * FROM test_v7;視圖的刪除
DROP VIEW test_v1,test_v2,test_v3;視圖結構的查看
DESC test_v7; SHOW CREATE VIEW test_v7;六、存儲過程
含義:一組經過預先編譯的sql語句的集合
好處:
分類:
1、無返回無參 2、僅僅帶in類型,無返回有參 3、僅僅帶out類型,有返回無參 4、既帶in又帶out,有返回有參 5、帶inout,有返回有參 注意:in、out、inout都可以在一個存儲過程中帶多個創建存儲過程
語法:
create procedure 存儲過程名(in|out|inout 參數名 參數類型,...) begin存儲過程體end類似于方法:
修飾符 返回類型 方法名(參數類型 參數名,...){方法體; }注意
1、需要設置新的結束標記 delimiter 新的結束標記 示例: delimiter $CREATE PROCEDURE 存儲過程名(IN|OUT|INOUT 參數名 參數類型,...) BEGINsql語句1;sql語句2;END $2、存儲過程體中可以有多條sql語句,如果僅僅一條sql語句,則可以省略begin end3、參數前面的符號的意思 in:該參數只能作為輸入 (該參數不能做返回值) out:該參數只能作為輸出(該參數只能做返回值) inout:既能做輸入又能做輸出調用存儲過程
call 存儲過程名(實參列表)七、函數
創建函數
學過的函數:LENGTH、SUBSTR、CONCAT等
語法:
調用函數
SELECT 函數名(實參列表)函數和存儲過程的區別
關鍵字 調用語法 返回值 應用場景 函數 FUNCTION SELECT 函數() 只能是一個 一般用于查詢結果為一個值并返回時,當有返回值而且僅僅一個 存儲過程 PROCEDURE CALL 存儲過程() 可以有0個或多個 一般用于更新八、流程控制結構
系統變量
一、全局變量
作用域:針對于所有會話(連接)有效,但不能跨重啟
查看所有全局變量 SHOW GLOBAL VARIABLES; 查看滿足條件的部分系統變量 SHOW GLOBAL VARIABLES LIKE '%char%'; 查看指定的系統變量的值 SELECT @@global.autocommit; 為某個系統變量賦值 SET @@global.autocommit=0; SET GLOBAL autocommit=0;二、會話變量
作用域:針對于當前會話(連接)有效
查看所有會話變量 SHOW SESSION VARIABLES; 查看滿足條件的部分會話變量 SHOW SESSION VARIABLES LIKE '%char%'; 查看指定的會話變量的值 SELECT @@autocommit; SELECT @@session.tx_isolation; 為某個會話變量賦值 SET @@session.tx_isolation='read-uncommitted'; SET SESSION tx_isolation='read-committed';自定義變量
一、用戶變量
聲明并初始化:
SET @變量名=值; SET @變量名:=值; SELECT @變量名:=值;賦值:
方式一:一般用于賦簡單的值 SET 變量名=值; SET 變量名:=值; SELECT 變量名:=值;方式二:一般用于賦表 中的字段值 SELECT 字段名或表達式 INTO 變量 FROM 表;使用:
select @變量名;二、局部變量
聲明:
declare 變量名 類型 【default 值】;賦值:
方式一:一般用于賦簡單的值 SET 變量名=值; SET 變量名:=值; SELECT 變量名:=值;方式二:一般用于賦表 中的字段值 SELECT 字段名或表達式 INTO 變量 FROM 表;使用:
select 變量名二者的區別:
作用域 定義位置 語法用戶變量 當前會話 會話的任何地方 加@符號,不用指定類型
局部變量 定義它的BEGIN END中 BEGIN END的第一句話 一般不用加@,需要指定類型
分支
一、if函數
語法:if(條件,值1,值2)
特點:可以用在任何位置
二、case語句
語法:
情況一:類似于switch case 表達式 when 值1 then 結果1或語句1(如果是語句,需要加分號) when 值2 then 結果2或語句2(如果是語句,需要加分號) ... else 結果n或語句n(如果是語句,需要加分號) end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)情況二:類似于多重if case when 條件1 then 結果1或語句1(如果是語句,需要加分號) when 條件2 then 結果2或語句2(如果是語句,需要加分號) ... else 結果n或語句n(如果是語句,需要加分號) end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)特點:
可以用在任何位置
三、if elseif語句
語法:
if 情況1 then 語句1; elseif 情況2 then 語句2; ... else 語句n; end if;特點:
只能用在begin end中!!!!!!!!!!!!!!!
三者比較:
應用場合
if函數 簡單雙分支
case結構 等值判斷 的多分支
if結構 區間判斷 的多分支
循環
語法:
【標簽:】WHILE 循環條件 DO循環體 END WHILE 【標簽】;特點:
只能放在BEGIN END里面如果要搭配leave跳轉語句,需要使用標簽,否則可以不用標簽leave類似于java中的break語句,跳出所在循環!!!總結
以上是生活随笔為你收集整理的(三)MySQL入门,看我就够了!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HP LaserJet 400 M401
- 下一篇: Wix vs GoDaddy网站建设者2