MySQL(基礎篇)數據庫知識總結

本篇均爲博主學習數據庫MysSQL基礎篇時的知識點總結,給大家推薦一下超詳細的學習網址:MySQL

1.MySQL使用小技巧

1.tab自動補齊

2.F12自動調整代碼

3.光標放上雙擊字段名直接出代碼

4.使用*號的缺點,不能改變查詢結果字段順序

5.查詢前先打開庫,查詢前用:USE 表名

6.字段用單引號表示,用以區分

7.對哪條代碼操作,選中哪條代碼

2.關於查詢

(1)查詢常量值
SELECT 100;
SELECT 'john';(數據庫沒有字符與字符串的差別)
(2)查詢表達式
SELECT 100%98;(查詢計算結果)
(3)查詢函數
SELECT VERSION();(查詢函數返回值)

3.查詢結果取別名

方法一:
 SELECT  字段名  AS  別名 FROM 表名;
方法二:
SELECT  字段名 別名 FROM 表名;

注意:當別名遇到特殊符號時,要加單/雙引號

4.查詢結果去重

加DISTINCT去重

SELECT DISTINCT 字段名 FROM 表名;

5.+號的作用

在mysql中,加好僅代表運算符

SELECT 90+100;    --如果兩個字段都爲數值型,則進行運算

SELECT '90'+100;  --如果一個是字符型,一個是數值型,嘗試將字符型轉化爲數值型
進行運算,如果轉換成功,則進行運算,如果轉換失敗,將字符型轉換爲0

SELECT NULL+99;   --只要一方爲NULL,結果肯定爲NULL

6.使用CONCAT實現連接字段

SELECT CONCAT('a','b','c');  --查詢結果:abc

7.顯示錶結構

DESC 表名

8.IFNULL

判斷字段是否爲空,如果爲空返回相應值

SELECT IFNULL(待判斷字段名,爲空時返回值);

9.篩選條件

.條件運算符:大於>    小於<    等於=     不等於<>=.邏輯運算符:&&     ||    !   
           and    or   not.模糊查詢:
   **like**  :
                 通配符:‘%’:任意多個字符,包含0個字符
                         ‘_’:任意單個字符
            
                 注意:當模糊查詢出現通配符時
                 解決:用轉義字符
                 第一種轉義
                 LIKE ' _/_*'--代表查找第二個字符是‘_’的字段
    
                 第二種轉義
                 LIKE '_&*' ESCAPE '&'--說明'&'是一個轉義字符
   
   
  **BETWEEN and**:
                     WHERE 字段名 BETWEEN 'a'  and  'b';  --篩選出字段在[a,b]區間的數據
                    注意:包含臨界值,且兩個值不能顛倒
               
                    
    **IN**:
              WHERE 字段名 IN('a','b','c'); --判斷字段中的值是否滿足列表中的某一項
              注意:列表中值類型必須統一或兼容,且不支持通配符


    **is null**:
            WHERE 字段名 IS NULL;   --篩選爲空的字段
            SHERE 字段名 IS NOT NULL; --篩選不爲空的字段
            注意:'='不能判斷空值,IS NUL 只能用於判空值
    
    
    **安全等於<<==>>**:
            WHERE 字段 <<=>>  'a';      --判斷字段等於某一個值
            WHERE 字段 <<=>>  NULL;     --判斷字段爲空
  

10.排序查詢

語法

select 查詢列表
from 表
【where 篩選條件】
order by 排序列表 【asc |  desc】//desc降序,asc升序,默認升序

特點
1.order by子句可以支持單個字段、多個字段、表達式、函數、別名
2.order by子句一般是放在查詢語句的最後面,limit子句除外

11.常用函數

概念:類似於java的方法,將一組邏輯語句封裝在方法體中,對外暴露方法名

好處:1.隱藏了實現細節 2.提高代碼的重用性

調用select 函數名(實參列表)【from 表】;

特點
1.叫什麼(函數名)
2.幹什麼(函數功能)

分類
1.單行函數:concat、length、ifnull等
2.分組函數

功能:做統計使用,又稱爲統計函數、聚合函數、組函數

一.字符函數

1.lenght   獲取參數值的字節個數
     SELECT LENGTH('john');  --返回4
     
2.concat   拼接字符串
      cancat(a,'_',b); --結果:a_b

3.upper(轉換爲大寫)  lower(轉換爲小寫)
SELECT UPPER('a');     --結果:A
SELECT lower('A');     --結果:a

4.substr、substring    截取字符串
注意:索引從1開始
SELECT substr('abcd',3);  --結果:cd
SELECT substr('abcd',3,1); --結果:c

5.instr  返回子串第一次出現的索引,如果找不到返回0
SELECT INSTR('abcdef','cd');  --結果:3
SELECT INSTR('acdbcdef','cd');  --結果:2

6.trim   去前後空格
SELECT TRIM('     abc     ');  --結果:3
也可以實現去前後指定字符
SELECT TRIM('a' FROM 'aaaaooaaaa'); --結果:oo

7.lpad 用指定的字符實現左填充指定長度
SELECT LPAD('abc',5,'*');   --結果:**abc

8.rpad 用指定的字符實現右填充指定長度
SELECT RPAD('abc',5,'*');   --結果:abc**

9.replace 替換
SELECT REPLACE('oxoxoxox','o','x'); --結果:xxxxxxxx

二.數學函數

1.round  四捨五入
SELECT ROUND(1.56);  --結果:2
SELECT ROUND(1.567,2)  --結果:1.57 (保留兩位小數)

2.ceil 向上取整
SELECT CEIL(1.02)    --結果:2

3.floor 向下取整
SELECT FLOOR(9.99)  --結果:9

4.truncate 截斷
SELECT TRUNCATE(1.6999,1);  --結果:1.6 (截斷保留一位小數,且不會四捨五入)

5.mod  取餘
SELECT MOD(10,3);   --結果:1

三.日期函數

1.now  返回當前系統日期+時間
SELECT NOW();

2.curdate 返回當前系統日期,不包含時間
SELECT CURDATE();

3.curtime 返回當前時間,不包含日期

4.獲取指定部分,年,月,日,小時,分鐘,秒
SELECT YEAR('1999-11-16');  結果:1999
SELECT MONTH('1999-11-16');  結果:11
SELECT DAY('1999-11-16');     結果:16

四.其他函數

SELECT VERSION();
SELECT DATABASE();  查看當前數據庫
SELECT USER();    查看當前用戶

五.分組函數

功能:用於統計使用,又稱爲聚合函數或統計函數或組函數
分類:
sum(求和)、avg(平均值)、max(最大值)、min(最小值)、count(計算個數)
特點:
1、sum、avg一般用於處理數值型
    max、min、count可以處理任何類型
    
2.以上分組函數都忽略null3.可以和DISTINCT搭配去重使用

4.count單獨介紹
一般使用count(*)用作統計行數

5.和分組函數一同查詢的字段要求是group by後的字段

12.分組查詢

語法

select 分組函數,列(要求出現在group by的後面)
from 表
【where 篩選條件】        --分組前的篩選
group by 分組的列表
【order by 子句】
【having 篩選條件】     --分組後的篩選

注意:查詢列表必須特殊,要求是分組函數和group by後出現的字段

特點:
1.分組查詢中的篩選條件分爲兩類  
                            數據源               位置            關鍵字
     分組前篩選             原始表             group by前面      where
     分組後篩選             分組後的結果集     group by後面       having
     
     **1.分組函數做條件肯定放在having字句中**
     **2.能用分組前篩選的就儘量使用分組前篩選**
2.group by 子句支持單個字段分組,多個字段分組(多個字段之間逗號隔開沒有順序要求),表達式或函數(用的較少)
3.也可以添加排序(排序放在整個分組查詢的最後)

13.連接查詢

含義:又稱多表查詢,當查詢的字段來自於多個表時,就會用到連接查詢

笛卡爾乘積現象:表1 有m行,表2 有n行,結果=m*n行
發生原因:沒有有效的連接條件
如何避免:添加有效的連接條件

爲提高語句簡潔度,可以爲表取別名
格式:WHERE 表名 AS 新表名
注意:如果取了別名,則查詢的字段就不能使用原始表名去限定

1.等值連接

1.多表等值連接的結果爲多表的交集部分
2.n表連接,至少需要n-1個連接條件
3.多表的順序沒有要求
4.一般需要爲表起別名
5.可以搭配前面介紹的所有子句使用,比如排序、分組、篩選

2.非等值連接

笛卡爾積後,按取值範圍篩選比如
A表:工資
B表:工資等級   最低工資    最高工資
查詢工資的工資等級:

SELECT 工資,工資等級
FROM A,B
WHERE 工資>=最低工資 AND 工資<=最高工資

3.自連接

相當於創了一張相同的表

A表:員工編號 員工姓名 員工上級編號
查詢員工姓名和他的上級姓名
分析:執行順序:A表的員工姓名 → 員工上級編號 → A表的員工編號 → 員工姓名

SELECT a.員工姓名,b.員工姓名
FROM A AS a,A AS b                 --相當於創了一張b表
WHERE a.員工上級編號=b.員工編號

4.外連接(sql99語法)

語法:
       select 查詢列表
       from 表1 別名 【連接類型】
       join 表2 別名
       on 連接條件
       【where 篩選條件】
       【group by 分組】
       【having 篩選條件】
       【order by 排序列表】
       
分類:
    內連接(※):inner
    外連接:
           左外連接(※):left【outer】
           右外連接(※):right【outer】
           全外連接:full【outer】
    交叉連接:cross(笛卡爾積)
       
  
 (一)內連接
 語法:
      select 查詢列表
      from 表1 別名
      inner join 表2 別名 on 連接條件
      【inner join 表3 別名 on 連接條件】
      分類:
           (1)等值
               特點:
                    1.添加排序、分組、篩選
                    2.inner可以省略
                    3.篩選條件放在where後面,連接條件放在on後面,提交分離性,便於閱                           讀
                    4.inner join連接和sql92語法中的等值連接效果是一樣的,都是查詢多 表交集
           (2)非等值(與sql92一樣)
           (3)自連接(與sql92一樣)

()外連接
應用場景:用於查詢一個表中有,另一個表中沒有的記錄


特點:
1.外連接的查詢結果爲主表中的所有記錄,如果從表中有和他匹配的,則顯示匹配的值
                                     如果從表中沒有和它匹配的,則顯示null
                                     外連接查詢結果=內連接結果+主表中有而從表中沒有的記錄
                                    
2.左外連接,left outer join左邊的是主表(FROM 後面跟主表)
  右外連接,right outer join右邊的是主表 (FROM 後面跟從表)
3.左外和右外交換兩個表的順序,可以實現同樣的效果

14.子查詢

含義
出現在其他語句中的select語句,稱爲子查詢或內查詢
外部的查詢語句,稱爲主查詢或外查詢

分類
按查詢出現的位置:
select後面:
標量子查詢
from後面:
支持表子查詢
where或having後面:
標量子查詢(單行),列子查詢(多行)
exists後面(相關子查詢):
表子查詢
語法:exists(完整的查詢語句) 結果1或0

按結果集的行列數不同:
標量子查詢(結果只有一行一列)
列子查詢(結果集只有一列多行)
行子查詢(結果集有一行多列)
表子查詢(結果集一般有多行)

.where或having後面
1.標量子查詢(單行子查詢)
2.列子查詢(多行子查詢)
3.行子查詢(一行多列)
特點:
(1)子查詢放在小括號內
(2)子查詢一般放在條件右側
(3)標量子查詢,一般搭配着單行操作符使用   > < >= <= = <>
列子查詢,一般搭配着多行操作符使用
in、any/some、all

在這裏插入圖片描述

15.分頁查詢

應用場景:當顯示的數據,一頁顯示不全,需要分頁提交sql請求

語法

select 查詢列表
from1join type join2
 on 連接條件
 where 篩選條件
 group by 分組字段
 having 分組後的篩選
order by 排序的字段】
limit offset,size;(offset 表示要顯示條目的起始索引,從0開始;size表示要顯示的條數)

特點
1.limit放在查詢語句的最後
2.公式:
要顯示的頁數page,每頁的條目數size
*select 查詢列表
form 表
limit (page-1)size,size;

下面是所有語句執行過程:

在這裏插入圖片描述

16.聯合查詢

union 聯合 合併:將多條查詢語句的結果合併成一個結果

語法:
          查詢語句1
          union
          查詢語句2
          union
          ........

應用場景:
要查詢的結果來自於多個表,且多個表沒有直接的連接關係,但查詢的信息一致
特點:
     1.要求多條查詢語句的查詢列數是一致的
     2.要求多條查詢語句的查詢的每一列的類型和順序最好一致
     3.union關鍵字默認去重,如果使用union all可以包含重複項

17.插入語句

方式一:
語法:
      insert into 表名(列名,....)values(1,,....)
特點:
    1.支持插入多行
       insert into 表名
       values(1,2)(值a,值b)
    2.支持子查詢
       insert into 表名
       子查詢                      //將子查詢結果集插入表中


方式二:
語法:
      insert into 表名
      set 列名=值,列名=

18.修改語句

1.修改單表記錄
語法:
      update 表名
      set=新值,列=新值.....
      where 篩選條件

2.修改多表記錄【補充】
語法:
sql92語法;
update1 別名,表2 別名
set=值,....
where 連接條件    and  篩選條件

sql99語法:
update1 別名
inner|left|right join2 別名
on 連接條件
set=,...
where 篩選條件

19.刪除語句

方式一:delete
語法:
1.單表刪除
     delete from 表名 where 篩選條件
 
2.多表刪除【補充】
   sql92語法:
       delete1的別名,表2的別名
       from1 別名,表2 別名
       where 連接條件
       and 篩選條件;
       
    sql99語法:
       delete1的別名,表2 的別名
       from1 別名
       inner|left|right join2 別名 on 連接條件
       where 篩選條件



方式二:truncate
語法 truncate table 表名;        //刪除表的全部數據

注意:
1.假如刪除表中有自增長列,如果用delete刪除後,再插入數據,自增長列的值從斷點開始,而truncate刪除後,在插入數據,自增長列的值從1開始
2.truncate刪除沒有返回值,delete刪除有返回值(返回受影響行數)
3.truncate刪除不能回滾,delete刪除可以回滾
4.delete 可以加where條件,truncate不能加
5.truncate刪除,效率高一點

10.庫的管理

一.庫的創建

語法:
create databaseif not exists】庫名;

二.庫的修改
更改字符集

語法:
ALTER DATABASE 庫名 CHARACTER SET 新字符集

三.庫的刪除

語法:
     DROP DATABASEIF EXISTS】 庫名

21.表的管理

一.表的創建

create tableIF NOT EXISTS】表名(
     列名  列的類型【(長度) 約束】,
     列名  列的類型【(長度) 約束】,
     列名  列的類型【(長度) 約束】,
     ....
     列名  列的類型【(長度) 約束】,
)

二.表的修改

核心語法:
       alter table 表名 add|drop|modify|change  column  列名 【列類型 約束】
       
1.修改列名
    ALTER TABLE 表名 CHANGE COLUMN 舊列名 新列名 類型;
    
2.修改列的類型或約束
    ALTER TABLE 表名 MODIFY COLUMN 列名 新類型 約束條件;
    
3.添加列
    ALTER TABLE 表名 ADD COLUMN  列名 類型;
    
4.刪除列
    ALTER TABLE 表名 DROP COLUMN 列名;
    
5.修改表名
    ALTER TABLE 表名 RENAME TO 新表名;

三.表的刪除

語法:
   DROP TABLEIF EXISTS】 表名;

四.表的複製

1.僅僅複製表的結構
  CREATE TABLE 新表名 LIKE 舊錶名;
 
2.複製表的結構+數據
  CREATE TABLE 新表名
  SELECT * FROM 舊錶名
  
3.複製表的結構+部分數據
  CREATE TABLE 新表名
  SELECT 複製的字段
  FROM 舊錶名
  WHERE 篩選條件

工作中通用的寫法:

DROP DATABASE IF EXISTS 舊庫名;
CREATE DATABASE 新庫名;

DROP TABLE IF EXISTS 舊錶名;
CREATE TABLE 表名();

22.數據類型

.整型
    分類:
        tinyintsmallintmediumintint/integerbigint  
 字節:   1          2         3          4           8
 特點:
 1.如果不設置無符號還是有符號,默認是有符號,如果想設置無符號,需要添加unsigned關鍵字
 2.如果插入的數值超出了整型的範圍,會報 out of range 異常,並且插入臨界值
 3.如果不設置長度,會有默認長度
   長度代表了顯示的最大寬度,如果不夠會用0在左邊填充,但必須搭配zerofill使用,展示寬度和該類型數字能表示的取值範圍是沒有關係的,取值範圍直接由類型決定


二.浮點型
分類:
1.浮點型
float(M,D)
double(M,D)
2.定點型
dec(M,D)
decimal(M,D)
特點:
1.M:整數部位+小數部位
  D:小數部位
  如果超過範圍,則插入臨界值
2.M和D都可以省略
  如果是decimal,則M默認爲10,D默認爲0
  如果是floatdouble,則會根據插入的數值的精度來決定精度
3.定點型的精度較高,如果要求插入數值的精度較高如貨幣運算則考慮使用,一般用浮點型


三.字符型
較短的文本:
char(M)
varchar(M)
其他:
binaryvarbinary用於保存較短的二進制
enum用於保存枚舉
set用於保存集合

較長的文本:
test
blod(較大的二進制)

特點:
                        M的意思                             特點                    空間的耗費     效率
char(M)         最大的字符數,可以省略                   固定長度字符                 比較耗費        高
varchar(M)      最大字符數,不可以省略                   可變長度字符                 比較節省        低


四.日期型
分類:
date 只保存日期
time 只保存時間
year 只保存年

datetime 保存日期+時間
timestamp保存日期+時間
特點:
               字節               範圍                  時區等影響
datetime        8                1000-9999                不受                      
timestamp       4                1970-2038

選取類型原則:
所選類型越簡單越好,能保存數值的類型越小越好

23.常見約束

含義:一種限制,用於限制表中的數據,爲了保證表中的數據的準確和可靠性
分類:六大約束
           NOT NULL:非空,用於保證該字段值不能爲空
           DEFAULT:默認,用於保證該字段有默認值
           PRIMARY  KEY:主鍵,用於保證該字段的值具有唯一性,並且非空
           UNIQUE:唯一,用於保證該字段的值具有唯一性,可以爲空
           CHECK:檢查約束【mysql不支持】
           FOREIGE KEY:外鍵,用於限制兩個表的關係,用於保證該字段的值必須來自主表的關聯列的值
                   在從表添加外鍵約束,用於引用主表中某列的值號


添加約束的時機:
        1.創建表時
            添加列級約束:
                語法:
                    直接在字段名和類型後面追加 約束類型即可
                    只支持:默認、非空、主鍵、唯一,可以添加多個列級約束
            添加表級約束:
                語法:在各個字段最下面
                    【constraint 約束名】 約束類型(字段名)
                    外鍵:FOREIGN KEY(外鍵字段) REFERENCES  主鍵表(主鍵字段)
                    
        2.修改表時
              添加列級約束:
                 語法:
                 ALTER TABLE 表名 MODIFY COLUMN 列名 字段類型 新約束條件;
              添加表級約束:
                 語法:
                 ALTER TABLE 表名 ADDconstraint 約束名】 約束類型(字段名) 【外鍵引用】
                 外鍵:ALTER TABLE 外鍵表名 ADDconstraint 約束名】 FOREIGN KEY(外鍵字段) REFERENCES  主鍵表(主鍵字段)

               刪除約束:
                語法:
                使用*表的修改語法*,將類型空着就會有刪除的效果
                刪除主鍵:
                  ALTER TABLE 表名 DROP PRIMARY KEY;
                刪除外鍵:
                  ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名
                刪除唯一:
                  ALTER TABLE 表名 DROP INDEX  唯一鍵名


主鍵和唯一的對比:
                     保證唯一性     允許非空       一個表可以有多少個    是否允許組合
        主鍵           √               ×               至多一個         √,但不推薦
        唯一           √               √               可以有多個       √,但不推薦

外鍵:
      1.要求在從表設置外鍵關係
      2.從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容,名稱無要求
      3.主表的關聯列必須是一個key(一般是主鍵或唯一)
      4.插入數據時,先插入主表,再插入從表
        刪除數據時,先刪除從表,再刪除主表

列級約束與表級約束的區別:                          
                 位置             支持的約束類型             是否可以取約束名
列級約束:      列的後面      語法都支持,但外鍵沒有效果           不可以
表級約束:      所有列下面     默認和非空不支持,其他支持        可以(主鍵沒有效果)             

24.標識列

又稱自增列
含義:可以不用手動的插入值,系統提供默認的序列值
語法:
   創建標識設置標識列:
                     列名 類型  約束條件 AUTO_INCREMENT
   修改表時設置標識列:  
                      ALTER TABLE 表名 MODIFY COLUMN 列名 INT 類型 約束條件  AUTO_INCREMENT;
    修改表時刪除標識列:
                      ALTER TABLE 表名 MODIFY COLUMN 列名 INT 類型 約束條件  ;
            
特點:
     1.標識列要求是一個key,不一定是主鍵
     2.一個表至多一個標識列
     3.標識列的類型只能是數值型
     4.標識列可以通過SET auto_increment_increment=3;設置步長
      可以通過手動插入值,設置起始值
一.創建表時設置標識列

25.事務

含義:一個或一組sql語句組成一個執行單元,這個執行單元要麼全部執行,要麼全部不執行 

在這裏插入圖片描述
一.事務的創建
隱式的事務:事務沒有明顯的開啓和結束的標記
比如insert、update、delect語句

顯式事務:事務具有明顯的開啓和結束標記
前提:必須設置自動提交功能爲禁用:set autocommit=0

步驟1:開啓事務
set autocommit=0;             --針對當前會話有效
start transaction;   可選的

步驟2:編寫事務的sql語句(select  insert  update  delete)
語句1;
語句2

步驟3:結束事務
commit;提交事務
rollback;回滾事務



補充:savepoint 節點名;       --設置保存點,放在語句之間
使用:搭配rollback使用       
語法:
      rollback to  保存點節點名    --回滾到保存點狀態

在這裏插入圖片描述
二.delete和truncate在事務使用時的區別
delete支持回滾,trucate不支持回滾

26.視圖

含義:虛擬表,和普通表一樣使用
特點:1.重用sql語句
      2.簡化複雜的sql操作,不必知道它的查詢細節
      3.保護數據,提高安全性
      
一.創建視圖
語法:  
     creat view 視圖名
     AS
     查詢語句  

二.修改視圖
  方式一:
         create or replace view 視圖名
         as
         查詢語句;

  方式二:
        alter view 視圖名
        as
        查詢語句;.刪除視圖
      drop view 視圖名,視圖名,...;.查看視圖
     方式一:DESC 視圖名;
     方式二: SHOW CREATE VIEW 視圖名;.更新視圖 
視圖的可更新性和視圖中查詢的定義有關係,以下類型的視圖是不能更新的。
1.包含以下關鍵字的sql語句:分組函數、distinctgroup byhavingunion、或者union all
2.常量視圖
3.select包含子查詢
4.join
5.from一個不能更新的視圖
6.where子句的子查詢引用了from子句的表

如果可以更新,語句與表的更新一樣


視圖與表的區別
         創建語法關鍵字          是否實際佔用物理空間            使用
視圖      create view             只是保存了sql邏輯       增刪改查,一般不能增刪改
表        create table               保存了數據                 增刪改查

27.變量

這部分的詳細介紹:MySQL變量

系統變量:全局變量,會話變量
自定義變量:用戶變量,自定義變量

一系統變量:
  說明:變量由系統提供,不是用戶定義,屬於服務器層面
  注意:如果是全局級別,則需要加global,如果是會話級別,則需要加session,如果不寫默認,則默認session
  全局變量作用域:服務器每次啓動將爲所有的全局變量賦初值,針對於所有會話(連接)有效,但不能跨重啓
  會話變量作用域:僅僅針對於當前會話(連接)有效 
  使用的語法:
      1.查看所有的系統變量
               show global|session】 variables;
      2.查詢滿足條件的部分系統變量
               show global|session】variables like '%char%';
      3.查看指定的某個系統變量的值
               select @@globall|session.系統變量名;
      4.爲某個系統變量賦值
         方式一:
                set global|session】 系統變量名 = 值
         方式二:
                set @@global|session.系統變量名=值
         

          
二.自定義變量:
說明:變量是用戶自定義的,不是由系統的
使用步驟:
聲明
賦值
使用(查看、比較、運算等)

1.用戶變量
作用域:針對於當前會話(連接)有效,同會話變量的作用域
應用在任何地方,也就是begin end

賦值符號:=或:=1)聲明並初始化
     方式一:SET @用戶變量名 = 值
     方式二:SET @用戶變量名:= 值
     方式三:SELECT @用戶變量名:=(2)賦值(更新用戶變量的值)
     方式一:通過SETSELECT
             SET @用戶變量名 =SET @用戶變量名:=SELECT @用戶變量名:= 值
      方式二:通過SELECT INTO
             SELECT 字段 INTO @變量名
             FROM;
 (3)使用(查看用戶變量的值)
              SELECT @變量名

2.局部變量
作用域:僅僅在定義他的begin end中有效
應用在begin end中的第一句話 
 (1)聲明
      DECLARE 變量名 類型;
      DECLARE 變量名 類型 DEFAULT;  (聲明並初始化)2)賦值
      方式一:通過SETSELECT
             SET 局部變量名 =SET 局部變量名:=SELECT @用戶變量名:= 值
      方式二:通過SELECT INTO
             SELECT 字段 INTO 局部變量名
             FROM;3SELECT 局部變量名;


對比用戶變量和局部變量
              作用域                  定義和使用位置                                  語法
 用戶變量    當前會話                 會話中的任何地方                         必須加@符號,不用限定類型
 局部變量    BEGIN END中       只能在BEGIN END中,且爲第一句話                一般不用加@符號,需要限定類型

28.存儲過程

這部分的詳細介紹MySQL存儲過程

存儲過程:類似於java中的方法
好處
1.提高代碼的重用性
2.簡化操作

含義:一組預先編譯號的SQL語句的集合,理解成批處理語句
好處
1.提高代碼的重用性
2.簡化操作
3.減少了編譯器次數並且減少了和數據庫服務器的連接次數,提高了效率

.創建語法
    CREATE PROCEDURE 存儲過程名(參數列表)
    BEGIN
         存儲過程體(一組合法的SQL語句)
    END

注意:
1.參數列表包含三部分
  參數模式  參數名  參數類型
  參數模式:
  IN:該參數可以作爲輸入,該參數需要調用方傳入值
  OUT:該參數可以作爲輸出,也就是該參數可以作爲返回值
  INOUT:該參數即可以作爲輸入又可以作爲輸出,也就是該參數既需要傳入值,又可以返回值
2.如果存儲過程體僅僅只有一句話,BEGIN END可以省略
3.存儲過程體中的每條SQL語句的結尾要求必須加分號
  存儲過程的結尾可以使用DELIMITER重新設置
  語法:
  DELIMITER 結束標記
  案例:
  DELIMITER $


二.調用語法
CALL 存儲過程名(實參列表);.刪除存儲過程
語法:DROP procedure 存儲過程名;.查看存儲過程的信息
SHOW CREATE PROCEDURE 存儲過程名;

29.函數

含義:一組預先編譯號的SQL語句的集合,理解成批處理語句
函數:類似於java中的方法
好處
1.提高代碼的重用性
2.簡化操作
3.減少了編譯器次數並且減少了和數據庫服務器的連接次數,提高了效率

函數與存儲過程的區別
存儲過程:可以有0個返回,也可以有多個返回,適合做批量插入、批量更新
函數:有且僅有1個返回,適合做處理數據後返回一個結果

.創建語法
CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
BEGIN
	函數體
END
注意:
1.參數列表包含兩部分:參數名、參數類型
函數體:肯定會有return語句,如果沒有會報錯(如果return語句沒有放在函數體2.的最後也不報錯,但不建議)
3.函數體中僅有一句話,則可以省略begin end
4.使用delimiter語句設置結束標記

二.調用函數
SELECT 函數名(參數列表)

三.查看函數
SHOW CREATE FUNCTION 函數名;.刪除函數
DROP FUNCTION 函數名;

30.流程控制結構

順序結構:程序從上往下依次執行
分支結構:程序從兩條或多條路徑中選擇一條
循環結構:程序滿足一定條件的基礎上,重複執行一段代碼

31.分支結構

.if函數     if   else  的效果
SELECT IF(10>5,'大','小');  --結果:大
SELECT IF(10<5,'大','小');  --結果:小.case結構
1.作爲表達式(應用在任何地方)
使用一:switch case 的效果
case 表達式
when 常量1 then 返回的值1
when 常量2 then 返回的值2
when 常量3 then 返回的值3
......
else 返回的值n
end;

使用二:類似 多重if
case
when 條件1 then 返回的值1
when 條件2 then 返回的值2
.....
else 返回的值n
end;


2.作爲獨立語句(應用在BEGIN END 中)
使用一:switch case 的效果
case 表達式
when 常量1 then 語句1;
when 常量2 then 語句2;
when 常量3 then 語句3;
......
else 語句n;
end case;

使用二:類似 多重if
case
when 條件1 then 語句1;
when 條件2 then 語句2;
.....
else 語句n;
end case;

特點:
    1.可以作爲表達式,嵌套在其他語句中使用,可以放在任何地方,BEGIN END中或BEGIN END 的外面,可以作爲獨立的語句去使用,只能放在BEGIN END2.如果WHEN中的值滿足或條件成立,則執行對應的THEN後面的語句,並且結束CASE,如果都不滿足,則執行ELSE中的語句或值
    3.ELSE可以省略,如果ELSE省略了,並且所有WHEN條件都不滿足,則返回NULL


3.if結構(應用在BEGIN END中)
功能:實現多重分支
語法:
     if 條件1 then 語句1;
     else 條件2 then 語句2;
     ...else 語句n;end if;
     

32.循環結構

應用範圍:應用在BEGIN END中

分類:whilelooprepeat
循環控制:
        iterate 類似於 continue,繼續,結束本次循環,繼續下一次
              語法:iterate 循環標籤;
        leave 類似於 break,跳出,結束當前所在的循環
               語法:leave 循環標籤;

1.while
語法:
【標籤:】while 循環條件 do
          循環體;
 end while【標籤】;


2.loop
語法:
【標籤:】loop
     循環體;
end loop 【標籤】;
可以用來模擬簡單的死循環


3.repeat
語法
【標籤:】repeat
      循環體;
until 結束循環條件
end repeat 【標籤】;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章